我有一个非常精确的要求。假设我有以下基本模型:
@ValidStudent
public class Student {
private String firstName;
private String gender;
private List<@ValidCourse Course> courses;
}
public class Course {
private String title;
private LocalDate date;
private String level;
}
@ValidCourse
是一个简单的自定义注释,用于验证Course
对象。
在我的Spring Boot
应用程序中,有一个自定义@ExceptionHandler
,它返回如下错误:
{
"apierror": {
"status": "BAD_REQUEST",
"timestamp": "05-03-2020 11:00:09",
"message": "Validation Error",
"subErrors": [
{
"object": "Student",
"field": "firstName",
"rejectedValue": " ",
"message": "firstName can't be blank. rejected value={" "}"
},
{
"object": "Student",
"field": "gender",
"rejectedValue": "FOO",
"message": "gender has not a valid value. rejected value={FOO}"
},
{
"object": "Student",
"field": "course[0].level",
"rejectedValue": "BAR",
"message": "level has not a valid value. rejected value={BAR}"
}
]
}
}
如果您查看apierror.subErrors [2] .object,那么一切似乎都可以正常运行,但您可能会注意到该对象是“ Student”,但我想返回“ Course”。在部门中,subError.object
是ObjectError.objectName(相同程序包)中FieldError(程序包org.springframework.validation
)的值。
我已经尝试按照以下方式在@ValidCourse
级类上移动Course
,但是在这种情况下,当{{1} }对象以POST
发送:
Student
我认为最简单的解决方案是在提交List<Course>
请求时在课程类级别触发@ValidCourse
public class Course {
private String title;
private LocalDate date;
private String level;
}
,但是我不知道该怎么做:(目前,我的控制器请求是:
@ValidCourse
编辑
通过在控制器类级别添加POST
,可以在课程级别上用@PostMapping
public Student addStudent(@RequestBody @Valid Student student){
return studentService.save(student);
}
验证@Validated
对象。但是,它仍以List<Course>
的形式返回@ValidCourse
:(
EDIT-2
经过更多的研究,我几乎可以确定它将是复杂的配置。我的object: Student
对象基于FieldError.objectName
,该对象从同一包扩展了subError
。此ObjectError Pojo将objectName定义为最终String。因此,没有二传手。另外,在javadoc org.springframework.validation.FieldError
中:ObjectError
总而言之,我认为可以通过创建一些自定义配置类来实现,但是为了使我的应用程序易于维护并避免使用任何简单的解决方案,我暂时不会为此做任何事情。
非常感谢您的帮助:)