在Java中将JSON原语映射到对象值

在Java中将JSON原语映射到对象值,java,json,jackson,Java,Json,Jackson,我有以下几个问题 { id: 1234, code: "N/A" } 我想将其转换为此类类的对象: class MySweetObject { int id; SomeStringWrapper code; } class SomeStringWrapper { String code; Boolean isNotAvailable() { return "N/A".equals(code); } } 简言之,我想将JSON中的简单属性值包装到对象中,

我有以下几个问题

{
  id: 1234,
  code: "N/A"
}
我想将其转换为此类类的对象:

class MySweetObject {
  int id;
  SomeStringWrapper code;
}

class SomeStringWrapper {
  String code;

  Boolean isNotAvailable() {
    return "N/A".equals(code);
  }
}

简言之,我想将JSON中的简单属性值包装到对象中,以添加一些业务功能。空值不是选项,因为
code
是必需的属性


可以在Jackson中执行此操作吗?

请尝试以下代码:

import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.sun.javafx.fxml.PropertyNotFoundException;

class Main {

    public static void main(String[] args) throws Exception {
        String jsonString = "{\"id\":\"1234\"}";
        ObjectMapper mapper = new ObjectMapper();
        MySweetObject obj = mapper.readValue(jsonString, MySweetObject.class);
        System.out.println(mapper.writeValueAsString(obj));
    }
}

class MySweetObject {

    private String id;
    private String code;

    public String getId() {
        return id;
    }

    public String getCode() {
        if (code == null) {
            throw new PropertyNotFoundException("Property code cannot be null");
        } else {
            return code;
        }
    }
}
通常
@JsonProperty(required=true)
会抛出异常,但它不起作用,相反,如果属性为null或为空,您可以在getter中手动抛出异常。检查上面的我的代码,如果为空,它将抛出
JsonMappingException

您可以在
setCode
方法中使用注释:

从文件中:

Setter表示当在中遇到具有匹配名称的属性时 JSON内容,此方法将用于设置属性的值


通过这种方式,您可以在设置前检查值是否为
null
,如果为
null
,则设置默认值(或执行任何您想要的操作)。

您需要修改JSON字符串,根据您的类,它是错误的。作为值“N/A”,jackson将假定它是
字符串
,但这是
SomeStringWrapper
类的实例。

为了反序列化到类结构,JSON应该如下所示:

{
  id: 1234,
  code: {
     code : "N/A"
  }
}

在构造函数中初始化它?我知道。我想实现的是让Jackson将这个精确的属性映射到包装字符串
code
属性我提到了
code
值是必需的,并且永远不能为空。这个问题的主要目的是为包装值中的特定值(如
“N/A”
)添加额外的逻辑。并且不检查
code
是否为空。这不是问题你只是编辑了你的问题,所以是的。。。而不是检查空值,你可以做你想做的。。。这就是“空值不是选项,因为代码是必需的属性。”如果这不需要空检查,那么它是什么?你需要检查null和emptyThanks mate!作品如果JSON数据中根本没有属性
code
,这将不起作用。在官方文档中:
Setter意味着当在JSON内容中遇到具有匹配名称的属性时,将使用此方法设置该属性的值。
@Thomas.L是的,您是对的,但据我所知,他在json中总是有
code
属性,在某些情况下,这个属性的值为
null
@amicoderozer如果我的根对象中有一个SomeStringWrapper的集合,你知道如何实现同样的效果吗?