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");
            
         }
    }