原文連接:https://blog.csdn.net/weixin_37535975/article/details/94443617json
1.自定義個註解類跨域
@Target({ElementType.PARAMETER})//參數級別 @Retention(RetentionPolicy.RUNTIME) //註解保留到運行階段 public @interface ParamsNotNull { }
@Target
通俗講,定義放在什麼位置,這個是放在參數中
此外還有
1.ElementType.CONSTRUCTOR:用於描述構造器
2.ElementType.FIELD:用於描述域(類的成員變量)
3.ElementType.LOCAL_VARIABLE:用於描述局部變量(方法內部變量)
4.ElementType.METHOD:用於描述方法
5.ElementType.PACKAGE:用於描述包
6.ElementType.PARAMETER:用於描述參數
7.ElementType.TYPE:用於描述類、接口(包括註解類型) 或enum聲明
@Retention 定義了該Annotation被保留的時間長短,有些只在源碼中保留,有時須要編譯成的class中保留,有些須要程序運行時候保留。即描述註解的生命週期
此時針對的在運行中,此外還有
1.RetentionPoicy.SOURCE:在源文件中有效(即源文件保留)
2.RetentionPoicy.CLASS:在class文件中有效(即class保留)
2.自定義攔截器,具體判斷請求來的參數app
/** * @Description 參數檢查註解攔截器 */ public class CheckParamsInterceptor extends HandlerInterceptorAdapter { private static Logger logger = LoggerFactory.getLogger(CheckParamsInterceptor.class); @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { if (!(handler instanceof HandlerMethod)) { logger.warn("UnSupport handler"); return true; } List<String> list = getParamsName((HandlerMethod) handler); for (String s : list) { String parameter = request.getParameter(s); if (StringUtils.isEmpty(parameter)){ JSONObject jsonObject = new JSONObject(); //這個地方是定義缺乏參數或者參數爲空的時候返回的數據 jsonObject.put("status", 203); jsonObject.put("msg", "缺乏必要的"+s+"值"); response.setHeader("Content-type", "application/json;charset=UTF-8"); response.setHeader("Access-Control-Allow-Origin", "*");//跨域 response.getWriter().write(jsonObject.toJSONString()); return false; } } return true; }
/** * 獲取使用了該註解的參數名稱 */ private List getParamsName(HandlerMethod handlerMethod) { Parameter[] parameters = handlerMethod.getMethod().getParameters(); List<String> list = new ArrayList<>(); for (Parameter parameter : parameters) { //判斷這個參數時候被加入了 ParamsNotNull. 的註解 //.isAnnotationPresent() 這個方法能夠看一下 if(parameter.isAnnotationPresent(ParamsNotNull.class)){ list.add(parameter.getName()); } } return list; }
3.添加校驗的攔截器configide
@Configuration public class WebMvcConfig implements WebMvcConfigurer { CheckParamsInterceptor checkSourceInterceptor = new CheckParamsInterceptor(); //增長校驗攔截器 @Override public void addInterceptors(InterceptorRegistry registry) { // 這個地方能夠定義攔截器的具體的路徑 registry.addInterceptor(checkSourceInterceptor).addPathPatterns("/**"); } }
4.寫一個測試類測試一下效果測試
@RestController @RequestMapping("/test") public class TestController { @RequestMapping("/test") //註解不要加,在參數類型前邊加上 public String test(@ParamsNotNull String userId){ return "ok"; } }
這個是當參數爲空的時候的校驗spa
這個是沒有這個參數屬性的時候,其實效果是同樣的.net
這樣之後再判斷參數是否是爲空的時候,直接加個註解就能夠了~!就不用再單獨判斷參數爲空啦!
原文連接:https://blog.csdn.net/weixin_37535975/article/details/94443617code