obe*_*ies 6 validation spring spring-mvc bean-validation spring-boot
当对 Spring MVC@RequestMapping
方法的参数进行验证时,Spring 根据参数的类型以不同的状态代码进行响应:
@RequestBody
参数,Spring 响应 400@RequestHeader
、@PathVariable
、 和@RequestParam
参数,Spring 响应 500。是否可以对此进行更改,以便 Spring 在所有情况下都以相同的 400 响应进行响应?
这是我的代码:
@Controller
@Validated
public class WebController {
@RequestMapping(method = RequestMethod.POST, path = "/action")
public ResponseEntity<String> doAction(
@RequestHeader("Header-Name") @Valid LatinString headerValue,
@RequestBody @Valid Struct body) {
return new ResponseEntity<>(HttpStatus.OK);
}
}
Run Code Online (Sandbox Code Playgroud)
public class LatinString {
@Pattern(regexp = "[A-Za-z]*")
private String value;
public LatinString(String value) {
this.value = value;
}
public String getValue() {
return value;
}
}
Run Code Online (Sandbox Code Playgroud)
public class Struct {
@Pattern(regexp = "[A-Za-z0-9.-]{1,255}")
private String domain;
public String getDomain() {
return domain;
}
}
Run Code Online (Sandbox Code Playgroud)
我认为可以通过处理异常类型来获取正确的状态代码(400)ConstraintViolationException
。为此,需要将以下代码添加到@Controller
或 a @ControllerAdvice
:
@ExceptionHandler(ConstraintViolationException.class)
public ResponseEntity<String> onValidationError(Exception ex) {
return new ResponseEntity<String>(HttpStatus.BAD_REQUEST);
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,这不包括像 invalid 请求那样的漂亮的错误消息正文@RequestBody
,所以我想知道是否有更好的解决方案。
归档时间: |
|
查看次数: |
8780 次 |
最近记录: |