我想验证我的请求正文@Valid
注解,但在 Spring Boot 中不起作用
我在 JAR 文件中有一个 Request 类,无法使用两个字段进行修改。其中一个字段的类型为对象。我的控制器类接受此类对象作为请求主体。当我将下面的 JSON 传递给控制器时,验证不起作用。以下是代码示例。
请求类别:
public class Request {
Object data;
Map<String, Object> meta;
public <T> T getData() throws ClassCastException {
return (T) this.data;
}
}
另一类:
public class StudentSignUpRequest {
@NotNull(message = "First Name should not be empty")
@Size(max = 64, message = "FirstName should not exceed 64 characters")
private String firstName;
@NotNull(message = "Last Name should not be empty")
@Size(max = 64, message = "LastName should not exceed 64 characters")
private String lastName;
@NotNull(message = "Email cannot be empty")
@Size(max = 50, message = "Email cannot exceed 50 characters")
@Pattern(regexp = EMAIL_REGEX_PATTERN, message = "Email should contain a valid email address.")
private String email;
// other fields
}
控制器类:
@PostMapping(value = Constants.STUDENT_SIGN_UP)
public Response signUpStudent(@Valid @RequestBody Request request, HttpServletRequest servletRequest) {
// retrieving the actual resource from request payload
StudentSignUpRequest signUpRequest = request.getData(StudentSignUpRequest.class);
// call service to sign-up student
return loginRegistrationService.signUpStudent(signUpRequest);
}
调用代码设置请求如下:
StudentSignUpRequest studentSignUpRequest = new StudentSignUpRequest();
//setter methods
Request payload = new Request();
payload.setData(studentSignUpRequest);
这是我发送的请求:
对于超过 64 个字符的名字:
示例 JSON:
{
"data": {
"firstName": "student111111111111111111111111111111111111111111111111111111111111",
"lastName": "somesurname",
"email": "[email protected] /cdn-cgi/l/email-protection"
}
}
如果不包括名字:
{
"data": {
"lastName": "somesurname",
"email": "[email protected] /cdn-cgi/l/email-protection"
}
}
这里两个@Size
也@NotNull
注释不起作用。
有什么解决办法吗?