1

Webservice Request の Calendar オブジェクトに日付値を送信する方法。

@Produces("application/json")
@Path("Service")
public class ServiceImpl {

    @Context
    HttpServletRequest httpServletRequest;
    @Context
    HttpServletResponse httpServletResponse;

    @POST
    @Path("getDetails")
    @Consumes("application/json")
    @Produces("application/json")
    public String getDetails (ServiceRequest request)
    {
    if(null!=request)
    return "Successfully Parsed given Date";
    }
}

public class ServiceRequest {

    private XMLGregorianCalendar requestDate;

    void setDate(XMLGregorianCalendar date){
    this.requestDate = date;
    }
    XMLGregorianCalendar getDate()
    {
    return requestDate;
    }
}

リクエスト URL: http://localhost:7001/WebProject/Service/getDetails

RequestParams:

{
"requestDate" : "2015-04-20T05:30:00.000Z"
}

また、値を日付として解析していません。Calendar オブジェクトの値を渡すにはどうすればよいですか。

genson jar を使用してリクエストをシリアル化しています。そして、エラーメッセージは次のようになります

Caused by: com.owlike.genson.JsonBindingException: Could not parse date 2015-04-20T05:11:00.000Z
    at com.owlike.genson.convert.DefaultConverters$DateConverter.deserialize(DefaultConverters.java:1003)
    at com.owlike.genson.convert.DefaultConverters$CalendarConverter.deserialize(DefaultConverters.java:1226)
    at com.owlike.genson.convert.DefaultConverters$CalendarConverter.deserialize(DefaultConverters.java:1209)
    at com.owlike.genson.convert.BeanViewConverter.deserialize(BeanViewConverter.java:102)
    at com.owlike.genson.convert.NullConverter$NullConverterWrapper.deserialize(NullConverter.java:56)
    at com.owlike.genson.reflect.PropertyMutator.deserialize(PropertyMutator.java:30)
    ... 48 more
Caused by: java.text.ParseException: Unparseable date: "2015-04-20T05:11:00.000Z"
    at java.text.DateFormat.parse(DateFormat.java:337)
    at com.owlike.genson.convert.DefaultConverters$DateConverter.read(DefaultConverters.java:1009)
    at com.owlike.genson.convert.DefaultConverters$DateConverter.deserialize(DefaultConverters.java:1001)
    ... 53 more
4

1 に答える 1

1

Genson 1.2以降を使用している場合は、コメントで指摘された2つの回答が機能するはずです。Genson 1.3 から、JAX-RS 拡張機能の構成に関して若干のリファクタリングが行われたため、より簡単に実行できるようになりました。ジャージーを使用した例:

Genson genson = new GensonBuilder()
  .useDateFormat(yourDateFormat)
  .create();

new ResourceConfig().register(new GensonJaxRSFeature().use(genson));

ただし、カスタム インスタンスを登録する古い方法は、1.3 以降でも引き続き機能するはずです。

jax-rsconfigurationに関する関連ドキュメントは次のとおりです。

于 2015-04-21T09:01:31.807 に答える