【问题标题】:Convert from JSON with Jackson Annotations使用 Jackson 注释从 JSON 转换
【发布时间】:2016-06-13 03:22:57
【问题描述】:

我正在尝试使用 Play 框架将 JSON 转换为 Java 对象。我无法轻松控制名称中包含破折号的输入 JSON。

{ "field-name": "value" }

因此,我无法创建默认映射到 JSON 的 Java 对象。我有一个看起来像这样的类:

import com.fasterxml.jackson.annotation.JsonProperty;

public class Data {
  @JsonProperty("field-name")
  public String fieldName;
}

我知道Play 2.4 uses Jackson,并且 我有一个单元测试,它能够使用默认的 Jackson ObjectMapper 从 JSON 填充对象。

JSON 是 POST 请求的主体,我尝试像这样使用它:

    Form<Data> form = Form.form(Data.class).bindFromRequest();

如果我打印form,我可以用预期值填充数据字段。但是,当我执行form.get() 时,返回的值有一个空字段。 (实际代码中字段较多,有Strings或者longs,都是null或者0)

我是否试图以错误的方式自定义 JSON 反序列化?还是我做错了什么?

【问题讨论】:

    标签: java json jackson playframework-2.4


    【解决方案1】:

    如您所料,您使用了错误的反序列化方式。 Forms 类仅适用于 PlayForms,不适用于 Json 请求。查看BodyParserJsonActions 文档:

    @BodyParser.Of(BodyParser.Json.class)
    public Result index() {
       RequestBody body = request().body();
       Data data = Json.fromJson(body.asJson(), Data.class);
       return ok("Got java object: " + data.toString());
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-20
      • 1970-01-01
      • 1970-01-01
      • 2011-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多