我有以下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
是必需的属性。
有可能在杰克逊这样做吗?
答案 0 :(得分:1)
您可以在setCode
方法中使用JsonSetter注释:
来自文档:
Setter表示在遇到名称匹配的属性时 JSON内容,此方法将用于设置属性的值
通过这种方式,您可以在设置之前检查值是否为null
,如果是null
,则设置默认值(或执行任何操作)。
答案 1 :(得分:-1)
请尝试以下代码:
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中手动抛出异常。检查上面的代码,如果为null,它将抛出JsonMappingException
。
答案 2 :(得分:-1)
您需要修改您的JSON字符串,根据您的类修改它的错误。作为价值" N / A"杰克逊将假设是string
,但这是SomeStringWrapper
类的实例。
您的JSON应如下所示,以便反序列化到您的类结构:
{
id: 1234,
code: {
code : "N/A"
}
}