栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

JAX-RS和java.time.LocalDate作为输入参数

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JAX-RS和java.time.LocalDate作为输入参数

通常,我会说要为Jackson编写一个序列化器/反序列化器,但是由于您不需要任何其他依赖关系,因此可以使用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<String, LocalDate> {    @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();    }}@Testpublic 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


更新

同样对于Jackson(我知道OP所说的没有依赖性,但这是针对其他人的),您可以使用jackson-datatype-
jsr310
模块。
在这里 查看完整的解决方案
****



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/616806.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号