java输入做参数需要close吗_JAX-RS和java.time.LocalDate作为输入参数
通常我會說為Jackson編寫一個Serializer / Deserializer,但由于你不想要任何其他依賴,你可以使用JAXB解決方案. Jackson(帶有Resteasy)支持JAXB注釋.所以我們能做的就是寫一個
XmlAdapter來從String轉換為LocalDate.一個例子就是這樣的
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import javax.xml.bind.annotation.adapters.XmlAdapter;
public class LocalDateAdapter extends XmlAdapter {
@Override
public LocalDate unmarshal(String dateString) throws Exception {
return LocalDate.parse(dateString, DateTimeFormatter.ISO_DATE);
}
@Override
public String marshal(LocalDate localDate) throws Exception {
return DateTimeFormatter.ISO_DATE.format(localDate);
}
}
你可以選擇你想要的任何格式,我剛剛使用了DateTimeFormatter.ISO_DATE,它基本上會尋找這種格式(2011-12-03).
然后,您需要做的就是為該類型的getter注釋該字段
public class Person {
private LocalDate birthDate;
@XmlJavaTypeAdapter(LocalDateAdapter.class)
public LocalDate getBirthDate() { return birthDate; }
public void setBirthDate(LocalDate birthDate) {
this.birthDate = birthDate;
}
}
如果您不希望使用此批注來混淆模型類,則可以在包級別簡單地聲明批注.
在與模型類相同的包中的package-info.java文件中,添加它
@XmlJavaTypeAdapters({
@XmlJavaTypeAdapter(type = LocalDate.class,
value = LocalDateAdapter.class)
})
package thepackage.of.the.models;
import java.time.LocalDate;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapters;
測試
@Path("/date")
public class DateResource {
@POST
@Consumes(MediaType.APPLICATION_JSON)
public Response postPerson(Person person) {
return Response.ok(DateTimeFormatter.ISO_DATE.format(
person.getBirthDate())).build();
}
}
@Test
public void testResteasy() throws Exception {
WebTarget target = client.target(
TestPortProvider.generateURL(BASE_URI)).path("date");
String person = "{\"birthDate\":\"2015-01-04\"}";
Response response = target.request().post(Entity.json(person));
System.out.println(response.readEntity(String.class));
response.close();
}
結果:2015-01-04
UPDATE
同樣對于杰克遜(我知道OP說沒有依賴關系,但這是針對其他人的),你可以使用jackson-datatype-jsr310模塊.請參閱完整解決方案here
總結
以上是生活随笔為你收集整理的java输入做参数需要close吗_JAX-RS和java.time.LocalDate作为输入参数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: HTML页面使用vant控件,如何优雅的
- 下一篇: $.post把表单对象传递过去_Form