Java Spring对包含嵌套不同类型对象的json主体的Bindingresult
我有一个场景,其中json请求由不同的自定义对象生成,例如: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
{
"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
}