controller返回值统一处理:https://blog.csdn.net/fz13768884254/article/details/81868835
@ControllerAdvice:官方api
@ControllerAdvice:官方api
具体实现细节,见代码:
package com.demo.controller;
import com.demo.exception.BadRequestException;
import com.demo.exception.NotReadyForSaleException;
import com.demon.exception.UserIllegalException;
import com.demo.common.result.base.Result;
import com.demo.result.base.ResultHelper;
import com.demo.result.enums.ResultCodeEnum;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.ResponseStatus;
import javax.servlet.http.HttpServletRequest;
/**
* @author: fz
* @date: 2018
* @description:
*/
@ControllerAdvice(basePackages = "com.demo.controller")
public class DemoControllerAdvice {
private Logger logger = LoggerFactory.getLogger(DemoControllerAdvice.class);
@ExceptionHandler(value = UserIllegalException.class) //处理的异常类型
@ResponseStatus(HttpStatus.UNAUTHORIZED)
@ResponseBody
public Result handleUserIllegalException(HttpServletRequest request, UserIllegalException e){
logger.error("非法请求,{}",e.getMessage());
return ResultHelper.setResultData(ResultCodeEnum.BAD_REQUEST_AUTH, e.getMessage()); //返回参数封装
}
@ExceptionHandler(value = {BadRequestException.class, NotReadyForSaleException.class}) //处理的异常类型
@ResponseStatus(HttpStatus.OK)
@ResponseBody
public Result handleBadRequestException(HttpServletRequest request, Exception e){
logger.error("错误请求,{}",e.getMessage());
return ResultHelper.setResultData(ResultCodeEnum.BAD_REQUEST, e.getMessage());
}
@ExceptionHandler(value = Exception.class) //处理的异常类型
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
@ResponseBody
public Result handleException(HttpServletRequest request, Exception e){
logger.error("内部错误,{}",e);
return ResultHelper.setResultData(ResultCodeEnum.INTERNAL_SERVER_ERROR, e.getMessage());
}
}
controller中代码:根据参数和获取数据,直接new一个异常(自定义或运行异常)
@Autowired
private DemoService demoService;
@RequestMapping(value = "/getAccountInfo", method = { RequestMethod.GET})
@ResponseBody
public Result getRatePlanInfo(@RequestParam("id") Long id){
if(id==null){
throw new BadRequestException("获取account信息请求必传参数id为空");
}
Account account = demoService.getAccountbyId(id);
if(account ==null){
throw new UserIllegalException("入参有误或帐号不存在");
}
logger.info(JSON.toJSONString(account));
return ResultHelper.setResultData(account);
}
记得在spring-web.xml中开启注解扫描:
<context:component-scan base-package="com.demo" use-default-filters="false"> <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/> <context:include-filter type="annotation" expression="org.springframework.web.bind.annotation.ControllerAdvice"/> </context:component-scan>