本文共 2194 字,大约阅读时间需要 7 分钟。
在Spring Boot应用中,我们可以通过AOP(面向切面编程)技术来实现对URL参数的检查。这种方法能够在代码运行时,自动判断传递的参数是否为空,并在必要时抛出异常。
首先,定义一个自定义异常类,这样可以将错误信息格式化处理。代码如下:
public class CheckException extends Exception { public CheckException(String message) { super(message); }} 接下来,创建一个AOP(面向切面编程)组件,这样可以在方法执行前后进行判断。代码如下:
import org.aspectj.lang.JoinPoint;import org.aspectj.lang.signature.CodeSignature;import org.springframework.stereotype.Component;import org.springframework.context.annotation.aspectj.Aspect;public class UrlCheckAspect { public class UrlCheck { UrlCheck() {} } @Aspect public class UrlCheckAspect { @Before(ptr = JoinPoint.IN ves rigin") public void inputCheck(JoinPoint joinPoint) throws Throwable { Object[] paramValues = joinPoint.getArgs(); CodeSignature sig = joinPoint.getSignature(); String[] paramNames = sig.getParameterNames(); String errorMSG = new StringBuilder(); for (int i = 0; i < paramNames.length; i++) { if (paramValues[i] == null) { errorMSG.append(paramNames[i]).append(" 必传 "); } } if (errorMSG.length() > 0) { throw new CheckException(errorMSG.toString()); } } }} 然后,定义一个全局的异常处理器,以处理抛出的CheckException。代码如下:
import org.springframework.web.servlet.mvc.support.AbstractControllerAdvice;import org.springframework.web.context.request.WebRequest;import org.springframework.web.context.response.WebResponse;@ ControllerAdvicepublic class GlobalException { @ ResponseBody public HttpResponse checkUrlException(CheckException e) { return HttpResponse.fail(e.getMessage()); }} 使用方法如下:
@RequestMapping(value = "/user-search")@ CheckUrlpublic HttpResponse searchUser(@RequestParam Long userId) { User user = userService.findById(userId); return user != null ? HttpResponse.success(user) : HttpResponse.fail("用户不存在");} 在使用@CheckUrl注解时,确保前端传输的参数名与服务端定义的参数名一致。这样,无需显式设置required = false,框架会自动处理参数。
@CheckUrl注解时,建议在方法头部加上@Action注解以确保切面生效。@CheckUrl,则不会执行参数检查。转载地址:http://crmjz.baihongyu.com/