使用 Jackson 注释从 JSON 转换
Convert from JSON with Jackson Annotations
我正在尝试使用 Play 框架将 JSON 转换为 Java 对象。我无法轻松控制名称中包含破折号的输入 JSON。
{ "field-name": "value" }
因此,我无法创建默认映射到 JSON 的 Java 对象。我有一个 class 看起来像这样:
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 反序列化?还是我做错了什么?
如您所料,您使用了错误的反序列化方法。表格 class 仅适用于 PlayForms,不适用于 Json 请求。查看 BodyParser and JsonActions 文档:
@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());
}
我正在尝试使用 Play 框架将 JSON 转换为 Java 对象。我无法轻松控制名称中包含破折号的输入 JSON。
{ "field-name": "value" }
因此,我无法创建默认映射到 JSON 的 Java 对象。我有一个 class 看起来像这样:
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 反序列化?还是我做错了什么?
如您所料,您使用了错误的反序列化方法。表格 class 仅适用于 PlayForms,不适用于 Json 请求。查看 BodyParser and JsonActions 文档:
@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());
}