【发布时间】:2019-12-12 09:54:06
【问题描述】:
我在 SPRING BOOT 中编写了以下自定义错误处理程序
@RestControllerAdvice
public class CustomGlobalExceptionHandler extends ResponseEntityExceptionHandler {
@ExceptionHandler
// @ResponseBody
public ResponseEntity<CustomErrorResponse> customHandleNotFound(Exception ex, WebRequest request) {
CustomErrorResponse errors = new CustomErrorResponse();
errors.setTimestamp(LocalDateTime.now());
errors.setError(ex.getMessage());
errors.setStatus(HttpStatus.CONFLICT.value());
errors.setErrorMsg(errors.getErrorMsg());
return ResponseEntity.ok(errors);
}
下面是我的代码控制器方法
@RestController
@RequestMapping(value="/api")
public class AppController {
@Autowired
private UserRepository userRepository;
@RequestMapping(value="/home/{id1}" ,method=RequestMethod.PUT)
@ResponseBody
public String home(@PathVariable("id1") Long idValue, @RequestBody @Valid Student s)
{
System.out.println( " idValue is " + idValue);
System.out.println( " Student -->" + s.getName() + " -- " + s.getId());
return "job done";
}
@RequestMapping("/foos")
// @ResponseBody
public String getFoos(@RequestParam(value="t1",required=true) String id) {
int i =1/0;
System.out.println(" id is " + i++);
return "ID: " + id + " status: Success";
}
异常处理程序对于方法 getFoos() 工作正常 当它遇到 1/0 时,我在 POSTMAN 中得到了预期的输出
{
"timestamp": "2019-08-04 11:24:22",
"status": 409,
"error": "/ by zero",
"errorMsg": "ERROR-msg"
}
但是在我的 home() 方法中,我故意将 Student 对象设为无效,并且在 POSTMAN 中没有收到错误消息,而只是在 Eclipse 控制台中。 为什么?
我收到此消息。那么当 Student 对象无效时,我该如何启动 CustomGlobalExceptionHandler
2019-08-04 23:25:57.551 警告 9652 --- [nio-8080-exec-6] .m.m.a.ExceptionHandlerExceptionResolver :已解决 [org.springframework.http.converter.HttpMessageNotReadableException: 缺少所需的请求正文:public java.lang.String com.example.hibernatemapping.controller.AppController.home(java.lang.Long,com.example.hibernatemapping.domain.Student)]
【问题讨论】:
-
添加
@ExceptionHandler({HttpMessageNotReadableException.class, Exception.class}) -
添加后我的服务器现在甚至都没有启动
-
为 [class org.springframework.http.converter.HttpMessageNotReadableException] 映射的模糊 @ExceptionHandler 方法:{public org.springframework.http.ResponseEntity com.example.hibernatemapping.exception.CustomGlobalExceptionHandler.customHandleNotFound(java. lang.Exception,org.springframework.web.context.request.WebRequest), public final org.springframework.http.ResponseEntity org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler.handleException(java.lang.Exception, org.springframework.web.context.request.WebRequest)
-
好的,所以只是@ExceptionHandler(Exception.class)
-
它不适用于 home() 方法
标签: java spring-boot