Java Spring对包含嵌套不同类型对象的json主体的Bindingresult

Java Spring对包含嵌套不同类型对象的json主体的Bindingresult,java,json,spring,bean-validation,hibernate-validator,Java,Json,Spring,Bean Validation,Hibernate Validator,我有一个场景,其中json请求由不同的自定义对象生成,例如: { "person:":{ "name":"xyx", "age":25 }, "movieList":[ { "name":"yyy", "duration":34, "language":"english" }, { "name":"zzz", "duration":37, "language

我有一个场景,其中json请求由不同的自定义对象生成,例如:

{
 "person:":{
    "name":"xyx",
    "age":25
  },
  "movieList":[
     {
       "name":"yyy",
       "duration":34,
       "language":"english"
     },
     {
       "name":"zzz",
       "duration":37,
       "language":"english"
     }
   ]

}
java类看起来像

public class Customer{
 private Person person,
 private List<MovieList> movieList;
}

另外,我的要求是抛出特定对象的异常,该异常导致异常发生,因为我的框架就是这样设计的。

首先,写下验证代码,为Person和MovieList定制验证或注释。 正如您所说,您希望分别验证Person和MovieList对象,您可以编写它们的验证器,然后执行手动验证:-

validator.validate(person, bindingResult);  
if (bindingResult.hasErrors()) {  
    //throw your exception for person object  
}

validator.validate(movieList, bindingResult);  
if (bindingResult.hasErrors()) {  
    //throw your exception for movieList object  
}//Or iterate through each object
要抛出异常,可以根据字段错误或ObjectError进行抛出

for (Object object : bindingResult.getAllErrors()) {
    if(object instanceof FieldError) {
        FieldError fieldError = (FieldError) object;
        //throw error
    }

    if(object instanceof ObjectError) {
        ObjectError objectError = (ObjectError) object;
        //throw error
    }
}

希望有帮助

您可以使用spring框架中的验证注释。它将验证POJO中的每个字段。请检查下面的示例。在MovieList中使用相同的方法

import javax.validation.constraints.AssertTrue;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import javax.validation.constraints.Email;

public class Person{

@NotNull(message = "Name cannot be null")
private String name;

@AssertTrue
private boolean working;

@Size(min = 10, max = 200, message = "About Me must be between 10 and 200 characters")
private String aboutMe;

@Min(value = 18, message = "Age should not be less than 18")
@Max(value = 150, message = "Age should not be greater than 150")
private int age;

@Email(message = "Email should be valid")
private String email;

// standard setters and getters 
 }

Person和MovieList的定义是什么?类MovieList{NotNull字符串名称;NotNull长持续时间;NotNull字符串语言;}类Person{NotNull字符串名称;NotNull int年龄;}您应该为其编写一些自定义验证sure@tonyhoan这与验证无关。谢谢,但我的问题是我的请求主体是customer,bindingResult针对的是整个customer,它是Person+MovieList的mad。谢谢,但我正在尝试验证customer类一个完整的非特定对象,绑定结果是为整个请求正文标记,但不为Customer内部的嵌套对象标记。请参阅此。
import javax.validation.constraints.AssertTrue;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import javax.validation.constraints.Email;

public class Person{

@NotNull(message = "Name cannot be null")
private String name;

@AssertTrue
private boolean working;

@Size(min = 10, max = 200, message = "About Me must be between 10 and 200 characters")
private String aboutMe;

@Min(value = 18, message = "Age should not be less than 18")
@Max(value = 150, message = "Age should not be greater than 150")
private int age;

@Email(message = "Email should be valid")
private String email;

// standard setters and getters 
 }