org.codehaus.jackson和com.fasterxml.jackson.core有关吗?我有
org.codehaus.jackson jackson-all version 1.7.2
和
com.fasterxml.jackson.core> jackson-databind版本2.4.3
在我的pom.我不确定它们是否多余且可能发生冲突.
我有一个模型,当从前端发送请求时,我在控制器中使用 @Valid 进行验证:
@NotNull
@Size(min=1, message="Name should be at least 1 character.")
private String name;
@NotNull
@Pattern(regexp = "^https://github.com/.+/.+$", message = "Link to github should match https://github.com/USER/REPOSITORY")
private String github;
Run Code Online (Sandbox Code Playgroud)
但现在我也在用杰克逊的 ObjectMapper 创建一个没有控制器的对象。有没有办法在 ObjectMapper 中注册这个验证,或者我应该只检查 setter 中的变量?
我需要反序列化一个又长又复杂的json,为此我编写了一组java类来映射数据,并且我必须为许多不同类型的字段(包括String、Boolean、BigDecimal等)编写自定义反序列化器。
我知道我可以使用相应的自定义反序列化器注释 java 类中的所有字段(如下所示),但随后我需要注释所有类中的几乎所有字段。
@JsonDeserialize(using = CustomBooleanJsonDeserializer.class)
private boolean active;
Run Code Online (Sandbox Code Playgroud)
我还知道我可以在 Spring 默认情况下注册一个模块ObjectMapper(如此处),但我只想对这些特定的类使用这些自定义反序列化器。
@Bean
public Module customDeserializersModule() {
SimpleModule module = new SimpleModule();
module.addDeserializer(Boolean.class, new CustomBooleanJsonDeserializer());
// add other custom deserializers
return module;
}
Run Code Online (Sandbox Code Playgroud)
ObjectMapper我什至知道我可以在 中使用自定义RestController,但我不想放弃通过自动数据绑定的便利@RequestBody,因为我必须防止其他人在没有必要的自定义反序列化器的情况下使用它。
@RequestMapping(method = RequestMethod.POST, value = "/data")
public ResponseEntity<ServerInfo> register(@RequestBody DataMapper data) {
// DataMapper is the target POJO class of the json's deserialization
}
Run Code Online (Sandbox Code Playgroud)
简而言之,我正在班级层面寻找类似的东西:
@JsonDeserialize(using = CustomStringJsonDeserializer.class, forType = String.class)
@JsonDeserialize(using = …Run Code Online (Sandbox Code Playgroud)