Spring Jackson 验证输入字段是有效的 JSON
Spring Jackson validate input field is a valid JSON
有一个通过休息电话补充的 pojo。 pojo 的字段之一是 JSON。 JSON 可以是任何有效的 JSON。它是由几个不同的输入提供的 运行 时间值。目标是在 JSON 字段不是有效的 JSON
时抛出异常
尝试过:
在 POJO
@JsonFormat(shape = JsonFormat.Shape.OBJECT)
private JsonNode json;
也尝试过使用
@JsonRawValue
然而,当我提供任何东西时,它会将其作为某种类型的节点(TestNode、IntNode)等接收。
无论如何要在不引入额外代码的情况下进行验证?如果不是,当对象进入时如何在控制器处检查?
一种方法是使用 org.springframework.validation.Validator
您可以使用
注释您的控制器
@PostMapping("/abc")
public Test test((@Validated(YourValidator.class)
@RequestBody YourPojo pojo)) {
return test;
}
现在您可以编写自己的验证
public class YourValidator implements org.springframework.validation.Validator {
@Override
public void validate(Object target, Errors errors) {
YourPojo pojo = (YourPojo) target;
boolean validJson =false;
try {
final ObjectMapper mapper = new ObjectMapper(); //jackson library
String jsonInString = pojo.getJsonField() ;
mapper.readTree(jsonInString);
validJson= true;
} catch (IOException e) {
validJson= false;
}
errors.rejectValue("jsonField", "notValid");
}
}
有一个通过休息电话补充的 pojo。 pojo 的字段之一是 JSON。 JSON 可以是任何有效的 JSON。它是由几个不同的输入提供的 运行 时间值。目标是在 JSON 字段不是有效的 JSON
时抛出异常尝试过: 在 POJO
@JsonFormat(shape = JsonFormat.Shape.OBJECT)
private JsonNode json;
也尝试过使用
@JsonRawValue
然而,当我提供任何东西时,它会将其作为某种类型的节点(TestNode、IntNode)等接收。
无论如何要在不引入额外代码的情况下进行验证?如果不是,当对象进入时如何在控制器处检查?
一种方法是使用 org.springframework.validation.Validator
您可以使用
@PostMapping("/abc")
public Test test((@Validated(YourValidator.class)
@RequestBody YourPojo pojo)) {
return test;
}
现在您可以编写自己的验证
public class YourValidator implements org.springframework.validation.Validator {
@Override
public void validate(Object target, Errors errors) {
YourPojo pojo = (YourPojo) target;
boolean validJson =false;
try {
final ObjectMapper mapper = new ObjectMapper(); //jackson library
String jsonInString = pojo.getJsonField() ;
mapper.readTree(jsonInString);
validJson= true;
} catch (IOException e) {
validJson= false;
}
errors.rejectValue("jsonField", "notValid");
}
}