@ExceptionHandler捕获不到MethodArgumentNotValidException
package com.imooc.mall.exception;
import com.imooc.mall.common.ApiRestResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.validation.BindingResult;
import org.springframework.validation.ObjectError;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.ArrayList;
import java.util.List;
/**
* 描述: 处理统一异常的handler
*/
@ControllerAdvice
public class GlobalExceptionHandler {
private final Logger log = LoggerFactory.getLogger(GlobalExceptionHandler.class);
@ExceptionHandler(Exception.class)
@ResponseBody
public Object handleException(Exception e) {
log.error("Default Exception: ", e);
return ApiRestResponse.error(ImoocMallExceptionEnum.SYSTEM_ERROR);
}
@ExceptionHandler(ImoocMallException.class)
@ResponseBody
public Object handleImoocMallException(ImoocMallException e) {
log.error("ImoocMallException: ", e);
return ApiRestResponse.error(e.getCode(), e.getMessage());
}
// @ExceptionHandler(MethodArgumentNotValidException.class)
// @ResponseBody
// public ApiRestResponse handleMethodArgumentNotValidException( MethodArgumentNotValidException e) {
// log.error("MethodArgumentNotValidException" , e);
//
// return handleBindingResult(e.getBindingResult());
// }
//
//
// public ApiRestResponse handleBindingResult(BindingResult result){
// List<String> errorMessage = new ArrayList();
// if (result.hasErrors()){
// List<ObjectError> allErrors = result.getAllErrors();
// for (ObjectError list: allErrors) {
// String message = list.getDefaultMessage();
// errorMessage.add(message);
// }
// }
// if (errorMessage.size() == 0){
// return ApiRestResponse.error(ImoocMallExceptionEnum.REQUEST_PARAM_ERROR);
// }
//
// return ApiRestResponse.error(ImoocMallExceptionEnum.REQUEST_PARAM_ERROR.getCode() , errorMessage.toString());
// }
@ExceptionHandler(MethodArgumentNotValidException.class)
@ResponseBody
public ApiRestResponse handleMethodArgumentNotValidException(
MethodArgumentNotValidException e) {
log.error("MethodArgumentNotValidException: ", e);
return handleBindingResult(e.getBindingResult());
}
private ApiRestResponse handleBindingResult(BindingResult result) {
//把异常处理为对外暴露的提示
List<String> list = new ArrayList<>();
if (result.hasErrors()) {
List<ObjectError> allErrors = result.getAllErrors();
for (ObjectError objectError : allErrors) {
String message = objectError.getDefaultMessage();
list.add(message);
}
}
if (list.size() == 0) {
return ApiRestResponse.error(ImoocMallExceptionEnum.REQUEST_PARAM_ERROR);
}
return ApiRestResponse
.error(ImoocMallExceptionEnum.REQUEST_PARAM_ERROR.getCode(), list.toString());
}
}package com.imooc.mall.controller;
import com.imooc.mall.common.ApiRestResponse;
import com.imooc.mall.common.Constant;
import com.imooc.mall.exception.ImoocMallExceptionEnum;
import com.imooc.mall.model.pojo.User;
import com.imooc.mall.model.requert.AddCategoryReq;
import com.imooc.mall.service.CategoryService;
import com.imooc.mall.service.UserService;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import javax.servlet.http.HttpSession;
import javax.validation.Valid;
@RestController
public class CategoryController {
@Resource
UserService userService;
@Resource
CategoryService categoryService;
@PostMapping("/admin/category/add")
public ApiRestResponse addCategory(HttpSession session , @Valid AddCategoryReq addCategoryReq){
// if (addCategoryReq.getName() == null ||addCategoryReq.getType() == null
// || addCategoryReq.getOrderNum() == null ||addCategoryReq.getParentId() == null){
// return ApiRestResponse.error(ImoocMallExceptionEnum.NEED_Category);
// }
User user = (User)session.getAttribute(Constant.IMOOC_MALL_USER);
if (user == null){
return ApiRestResponse.error(ImoocMallExceptionEnum.NEED_LOGIN);
}
boolean f = userService.checkAdminRole(user);
if (f){
categoryService.addCategory(addCategoryReq);
return ApiRestResponse.success();
}else {
return ApiRestResponse.error(ImoocMallExceptionEnum.NEED_ADMIN);
}
}
}package com.imooc.mall.model.requert;
import javax.validation.constraints.Max;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
public class AddCategoryReq {
@NotNull
@Size(min = 2 , max = 5)
private String name;
@NotNull
@Max(3)
private Integer type;
@NotNull
private Integer parentId;
@NotNull
private Integer orderNum;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getType() {
return type;
}
public void setType(Integer type) {
this.type = type;
}
public Integer getParentId() {
return parentId;
}
public void setParentId(Integer parentId) {
this.parentId = parentId;
}
public Integer getOrderNum() {
return orderNum;
}
public void setOrderNum(Integer orderNum) {
this.orderNum = orderNum;
}
}相关代码按照课程上面的写了但是返回的却是
相关截图:

相关截图:

10
收起
正在回答 回答被采纳积分+1
1回答
2023版Java工程师
- 参与学习 人
- 提交作业 8788 份
- 解答问题 9886 个
综合就业常年第一,编程排行常年霸榜,北上广深月薪过万! 不需要基础,无需脱产即可学习,只要你有梦想,想高薪! 全新升级:技术栈升级(包含VUE3.0,ES6,Git)+项目升级(前后端联调与功能升级)
了解课程





恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星