【发布时间】:2019-12-10 05:11:15
【问题描述】:
我有这种方法来处理所有请求标头丢失的异常,但在一个控制器中,预计会接收一个 json 作为正文。如果它是无效的 json 或为 null,它会丢弃带有自定义消息的异常:
@ExceptionHandler(value = {ServletRequestBindingException.class, HttpMessageNotReadableException.class})
public final ResponseEntity<ErrorResponse> handleHeaderException(Exception ex) {
List<String> details = new ArrayList<>();
details.add(ex.getMessage());
return new ResponseEntity<>(new ErrorResponse("Bad Request", details), HttpStatus.BAD_REQUEST);
}
{ “消息”:“错误请求”, “细节”: [ “缺少所需的请求正文:public org.springframework.http.ResponseEntity packages.fazerLogin(packages.BodyLogin) 抛出 java.io.IOException" ] }
{ “消息”:“错误请求”, “细节”: [ “JSON 解析错误:意外字符('\”'(代码 34)):期望用逗号分隔对象条目;嵌套异常是 com.fasterxml.jackson.core.JsonParseException:意外字符 ('\"' (code 34)): 期望用逗号分隔 Object 条目\n at [来源:(PushbackInputStream);行:3,列:3]" ] }
但我不想要像上面这样的长消息。只是“必需的请求正文”或“JSON 解析错误”就可以了。我想知道我能做什么。
我的控制器:
@PostMapping(value = "v1/token", consumes = "application/json;charset=UTF-8")
public ResponseEntity<TokenOutputDto> doLogin(@RequestBody @Valid BodyLogin body) throws IOException {
return authenticationModel.auth(body.getEmail(), body.getPassword());
}
另外,我应该为每个可能的异常(HttpClientErrorException、HttpServerErrorException 等)创建一个@ExceptionHandler 方法吗?这将是一个不好的做法,因为代码将几乎相同地重复......
【问题讨论】:
-
不,如果您需要以不同方式处理每个异常,那么您需要不同的方法
标签: java spring spring-boot spring-mvc