我正在使用Spring Boot创建一个POST请求,我需要根据用户输入验证请求主体。然而,当用户输入无效数据类型时,响应什么也不显示,只显示400 bad request
状态。我可以添加一条消息来告诉用户哪个字段是无效数据类型吗?
例如:这是我的控制器:
@RestController
@RequestMapping("/api/foo")
public class FooController {
@PostMapping("/save")
public void postFoo(@Valid @RequestBody Foo foo) {
// do somethings
}
}
这是我的Foo类:
public class Foo {
@NotBlank
private String name;
private Integer age;
// getter/setter
}
所以现在我发布一个请求如下:
{
"name": "Foo Name",
"age": "A String"
}
服务器将以状态400 Bad request
响应,但没有任何消息。如何放置Age must be an integer
之类的消息?
到目前为止,我只有一个将Age更改为String并添加@Pattern验证注解的解决方案。
public class Foo {
@NotBlank
private String name;
@Pattern(regexp = "[0-9]*", message = "Age must be an intege")
private String age;
// getter/setter
}
3条答案
按热度按时间zrfyljdw1#
您需要实现错误处理机制。
在你的错误处理程序中,你需要捕获所有的异常并返回错误响应。下面是一个基于控制器级ExceptionHandling的例子
在ErrorResponse模型中,您可以根据异常设置错误代码和消息,并通过ResponseStatus分配http错误代码
然而,这他的方法有一个主要的缺点:带@ExceptionHandler注解的方法只对特定的Controller有效,而不是对整个应用程序全局有效。
要全局处理异常,您可以使用ControllerAdvice。Here是一篇介绍总体错误处理机制的好文章
qco9c6ql2#
谢谢大家。我找到了一种方法来添加消息并响应用户,可以通过使用
ControllerAdvice
并重写handleHttpMessageNotReadable
方法来意识到错误,如下所示:响应将是:
l7mqbcuq3#
在post方法签名中,您可以使用Response Entity类来显示一些要返回给用户的异常消息,沿着一些状态代码。
public class FooController{
public ResponseEntity<?> showError()
{
return new ResponseEntity<>("Exception arised", HttpStatus.BAD_REQUEST);
}
}