1

我使用 JAX-RS 2.0 和 Glassfish 4 实现了一个简单的 REST-WebService。我的问题是,如果我向 WS 发送日期或日历,pojo 会丢失日期信息,并且值为 NULL。在我的 WebService 中,我设置了日期tmp.setDate(1),在我的 JUnit-Test-Case 中,我得到了信息[Thu Jan 01 02:00:00 CET 1970] 有什么想法为什么我通过请求丢失了日期信息?

我的客户 (JUNIT)

@Test
public void testPOST() {
client = ClientBuilder.newClient();
this.root = this.client.target(SERVER + "/restExample/example");

    OriginalSimpleDTO dto = new OriginalSimpleDTO();
    dto.setDate(new Date(1));

    final Entity<OriginalSimpleDTO> entity = Entity.entity(dto, mediaType);
    Response response = this.root.request().post(entity);
    System.out.println("POST Status " + response.getStatus());
    OriginalSimpleDTO tmp = response.readEntity(OriginalSimpleDTO.class);
    System.out.println("POST tmp-Date [" + tmp.getDate() + "]");

}

我的网络服务-资源

@POST
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public Response testPost(OriginalSimpleDTO dto) {
    System.out.println("dto date [" + dto.getDate() + "]");

    OriginalSimpleDTO tmp = new OriginalSimpleDTO();
    tmp.setDate(new Date(1));

    return Response.ok(tmp).build(); 
}

我的波乔

@XmlRootElement
@JsonInclude (Include.NON_NULL)
public class OriginalSimpleDTO implements Serializable {
    private static final long serialVersionUID = 1L;
    private Date datum;

    //default Constructor
   public OriginalSimpleDTO() {}

   @JsonSerialize (using = DateSerializer.class)
   public Date getDatum() {
      return datum;
   }

   @JsonDeserialize (using = DateDeserializer.class)
   public void setDatum(Date datum) {
      this.datum = datum;
   }
}
4

2 回答 2

0

这取决于 glassfish 4 内部的不同版本的 Jackson-Provider,无法正确初始化提供程序。

请参阅REST webservice 不要使用我的 JsonSerializer

于 2013-09-18T06:38:24.003 回答
0

好的,我之前发布的解决方案不正确,正确的答案是使用 ISO 8601 格式,所以真正有效的是下面的刺痛

使用 Glassfish4、JAX-RS2.0,没有其他自定义代码(反序列化器)

领域类

@Temporal(TemporalType.TIMESTAMP)
Date timeMiliStart;
WebResource

网络资源

@Path("/post/json")
@POST   
@Consumes({MediaType.APPLICATION_JSON})
public Response createBaseJson(Base base){

JSON(邮递员 POST)调用尝试一直失败

{"baseStr":"My new Car","languageId":1,"timeMiliStart":"2013-11-15 15:42:13.300","timeMiliEnd":"2013-11-15 15:42:16.521"}

JSON (Postman POST) 调用尝试成功

{"baseStr":"My new Car","languageId":1,"timeMiliStart":"1972-10-02T21:16:31.347+01:00","timeMiliEnd":"1997-07-16T19:20:30.45+01:00"}
于 2013-11-20T09:01:18.690 回答