Spring Jackson验证输入字段是否为有效JSON

qvtsj1bj  于 2022-11-09  发布在  Spring
关注(0)|答案(1)|浏览(173)

有一个通过rest调用提供的pojo。pojo的其中一个字段是JSON。JSON可以是任何有效的JSON。它是一个由几个不同输入提供的运行时值。目标是在JSON字段不是有效JSON时抛出异常
尝试过:在POJO

  1. @JsonFormat(shape = JsonFormat.Shape.OBJECT)
  2. private JsonNode json;

也尝试过使用

  1. @JsonRawValue

然而,当我提供任何东西时,它会将其作为某种类型的节点(TestNode,IntNode)等。
无论如何,在不引入额外代码的情况下进行验证?如果不这样做,当对象进入时,如何在控制器上进行检查?

vhmi4jdf

vhmi4jdf1#

一种方法是使用org.springframework.validation.Validator。您可以使用

  1. @PostMapping("/abc")
  2. public Test test((@Validated(YourValidator.class)
  3. @RequestBody YourPojo pojo)) {
  4. return test;
  5. }

现在,您可以编写自己的验证

  1. public class YourValidator implements org.springframework.validation.Validator {
  2. @Override
  3. public void validate(Object target, Errors errors) {
  4. YourPojo pojo = (YourPojo) target;
  5. boolean validJson =false;
  6. try {
  7. final ObjectMapper mapper = new ObjectMapper(); //jackson library
  8. String jsonInString = pojo.getJsonField() ;
  9. mapper.readTree(jsonInString);
  10. validJson= true;
  11. } catch (IOException e) {
  12. validJson= false;
  13. }
  14. errors.rejectValue("jsonField", "notValid");
  15. }
  16. }
展开查看全部

相关问题