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

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

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

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

也尝试过使用

@JsonRawValue

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

vhmi4jdf

vhmi4jdf1#

一种方法是使用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");

         }
    }

相关问题