aba*_*rik 5 java json jackson lombok
我有一个简单的案例,当我使用 Java8 中的 Jackson (2.8) 和 Lombok(最新版本)将 JSON 字符串转换为 POJO 时,我想对 JSON 字符串中的值强制执行空检查。但是看起来@NonNull使用创建 pojo 时不会抛出异常ObjectMapper.convertValue,但是当使用构建器模式正常创建 pojo 时它工作正常”?
这是我的情况:
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.Lombok;
import lombok.NoArgsConstructor;
import lombok.NonNull;
import lombok.extern.log4j.Log4j2;
@Log4j2
public class LearnJackson {
public static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
public static void main(final String[] args) throws IOException {
learnToConvertJsonToSimplePojo();
}
public static void learnToConvertJsonToSimplePojo() throws IOException {
String jsonString = "{}";
JsonNode node = OBJECT_MAPPER.readValue(jsonString, JsonNode.class);
// this is supposed to throw NullPointerException
MySimplePojo o = OBJECT_MAPPER.convertValue(node, MySimplePojo.class);
log.info("o.getVar1: {}, o.getVar2: {}", o.getVar1(), o.getVar2()); // prints null
// MySimplePojo.builder().build(); // this throws NullPointerException correctly
}
@NoArgsConstructor
@AllArgsConstructor
@Builder
@Data
public static class MySimplePojo {
@NonNull
private String var1;
@NonNull
private List<String> var2;
}
}
Run Code Online (Sandbox Code Playgroud)
找到了。使用JsonDeserialize注解修复
@NoArgsConstructor
@AllArgsConstructor
@Builder(builderClassName = "Builder", toBuilder = true)
@Data
@JsonDeserialize(builder = MySimplePojo.Builder.class)
public static class MySimplePojo {
@NonNull
private String var1;
@NonNull
private List<String> var2;
@JsonPOJOBuilder(withPrefix = "")
public static class Builder {
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3656 次 |
| 最近记录: |