来自json的JAX-RS joda datetime

时间:2017-05-04 11:59:07

标签: java json jersey jodatime genson

我正在使用java和以下库构建API

  • javax.ws.rs-API-2.0.1
  • genson-1.4
  • 乔达 - 时间 - 2.9.6

我现在正在尝试使用对象列表作为参数创建post请求

@Path("service")
public class ServiceResource {

    @Path("/stations/flow/forecasts")
    @POST
    @Consumes(MediaType.APPLICATION_JSON)
    @Produces(MediaType.APPLICATION_JSON)
    public List<Station> getStations(List<Station> stations) {
            //Code
    }
}

此类Station包含另一个具有DateTime变量的类的列表。

使用javascript从网络应用发送数据。当我没有使用datetime对象发送嵌套列表时,它工作正常。当我尝试发送它时,我收到错误:

  

java.lang.InstantiationException

发送的json看起来像这样

[
   {
      "code":"1048",
      "measures":[
         {
            "code":"10481002",
            "observations":[
               {
                  "date":{
                     "chronology":{
                     },
                     "millis":1487322000000
                  },
                  "value":1.702
               }
            ]
         }
      ]
   }
]

与此datevalue

相关联的java类
public class Value {
    private DateTime date;
    private Float value;
}

发送DateTime

时代码怎么不起作用

注意:其他所有内容在API中运行正常:发布用户对象,获取包含日期时间的数据,发回日期时间

修改

我发现joda-time有一个extension。我添加了以下代码

@Provider
public class GensonProvider implements ContextResolver<Genson> {
    private final Genson genson = new GensonBuilder().useConstructorWithArguments(true).useDateAsTimestamp(false).withBundle(new JodaTimeBundle()).create();

    @Override
    public Genson getContext(Class<?> type) {
        return genson;
    }
}

但它仍然给我相同的结果

1 个答案:

答案 0 :(得分:0)

您的日期格式不是标准格式。 改变这个

"date":{
  "chronology":{
  },
  "millis":1487322000000
}

"date": 1487322000000或字符串格式化日期(在这种情况下,您需要配置Genson来解析您的格式)。