当前位置: 首页 > 知识库问答 >
问题:

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

慕健
2023-03-14

使用JAX-RS和java.time.localdate(java8)时出现问题。

我想使用JSON将这样一个对象传递到JAX-RS方法中:

Person {
  java.time.LocalDate birthDay;
}

我得到的例外是:

共有1个答案

邢华清
2023-03-14

通常我会说为Jackson编写一个序列化/反序列化程序,但是由于您不想要任何其他依赖项,所以可以使用JAXB解决方案。Jackson(带有Resteasy)附带了对JAXB注释的支持。因此,我们所能做的就是编写一个XMLAdapter来将字符串转换为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;
    }
}
@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();
}
 类似资料:
  • 问题内容: 使用JAX-RS和(java8)时出现问题。 我想使用JSON将这样的对象传递到JAX-RS方法中: 我得到的异常是: :没有合适的构造找到型[简单的类型,类在[来源不能实例从JSON对象(需要添加/启用类型信息)::] ; 行:2,列:3] 如何创建某种将json-dates映射到的拦截器?我尝试实现a ,但是如果is是另一个类中的 字段 ,则我必须为每个持有a的类编写一个(据我所知

  • 问题内容: 现在已经有一段时间了,我一直在为满足我的开发需求而开发JAX-RS Web服务。到目前为止,我编写的所有方法都接受java字符串或原始类型作为输入。 这种方法的一个例子: 我现在想做的是接受图像作为输入。我读了很多有关此的文章。一些建议接受base64编码作为输入,而另一些建议接受实际的InputSteam。 但是,我还没有看到有关如何接受InputStream的完整示例。我读到有关@

  • 如何配置swaggerui来为具有集合输入参数的JAX-RS资源显示正确的参数datatype? 下面是一个示例groovy JAX-RS资源。其输入类型为 在swagger UI中,我看到填充了空类型的列表,而不是。它对输出参数工作得很好。使用注释,我可以指定响应类型。

  • JAX-RS是否可以只使用带有注释的Servlet3.0(特别是Tomcat7)来实现,而不必实现另一个Servlet容器? 如果不是,请解释为什么下面这本书中的引用是不正确的,或者是我对它的解释是错误的。 因为此示例部署在Java EE应用程序服务器或独立的Servlet3.x容器中,所以我们只需要一个空的web.xml文件。服务器将检测到某个应用程序类在您的WAR中,并自动部署它。(带有JAX

  • 问题内容: 我正在尝试使用HttpServletRequest从发布的表单中检索传递给jax- rs的一些参数。但是,我的请求对象始终为我的参数返回空值。我不是要这样做吗?我已经在下面发布了代码,并发送了示例请求。 这是我的服务: 请求示例: 问题答案:

  • JAX-RS (JSR 311) 是一个社区驱动的标准用于使用 Java 构建 RESTful Web 服务。