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() + "]");

}

私の WebService-Resource

@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 Web サービスが JsonSerializer を使用しないを参照してください

于 2013-09-18T06:38:24.003 に答える
0

さて、私が前に投稿した解決策は正しくありませんでした。正しい答えは ISO 8601 形式を使用することだったので、実際に機能したのは以下の文字列でした

Glassfish4、JAX-RS2.0、その他のカスタム コード (デシリアライザー) を使用しない

ドメインクラス

@Temporal(TemporalType.TIMESTAMP)
Date timeMiliStart;
WebResource

Web リソース

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

JSON (Postman 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 に答える