【发布时间】:2020-11-19 12:49:40
【问题描述】:
我有一个 Spring Boot Rest Controller,它接收一个带有验证字段的帖子正文。如果我发送违反验证的正文,我会收到错误响应。
但在该回复中,我缺少对错误的详细描述,即验证的哪一部分失败。在后端记录的异常中,这包括在内,但我希望对客户端可见:
HTTP 响应:
{
"timestamp": "2020-11-19T12:15:34.957+00:00",
"status": 400,
"error": "Bad Request",
"message": "Validation failed for object='postBody'. Error count: 1",
// <-- here I am missing the errors field that contains the (list of) error messages.
"path": "/comments"
}
控制器和 PostBody:
@RestController
@Validated
public class CommentsController {
public void createComment(PostBody postBody) {
//do stuff
}
}
public class PostBody {
private String text;
@Size(max = 10)
public String getText() {
return text;
}
// setter
}
后端日志中的异常包含错误:
2020-11-19 13:15:34 WARN o.s.w.s.m.s.DefaultHandlerExceptionResolver -
Resolved [org.springframework.web.bind.MethodArgumentNotValidException: Validation failed for argument [0] in
public CommentsController.createComment(PostBody):
[Field error in object 'postBody' on field 'text': rejected value [my very long input];
codes [Size.postBody.text,Size.text,Size.java.lang.String,Size]; arguments
[org.springframework.context.support.DefaultMessageSourceResolvable: codes [postBody.text,text];
arguments []; default message [text],10,0]; default message [size must be between 0 and 10]] ]
我是否需要配置任何其他内容才能将错误详细信息放入响应中?我希望这是开箱即用的。
【问题讨论】:
标签: java spring-boot validation