# param-validation **Repository Path**: yuygoi/param-validation ## Basic Information - **Project Name**: param-validation - **Description**: No description available - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-06-04 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # param-validation #### 介绍 param-validation是一个给SpringMVC、SpringWebFlux提供不需要Vo对象的Json参数校验工具, 并提供WebFlux-form-data参数注入校验, 无需担心WebFlux无法获取请求体参数坑爹的问题 #### 使用说明 1. 使用@EnableFranklinValidationAll开启Json参数校验+WebFlux-Form-Data(URL encode)参数校验,参数注入 2. 使用@EnableWebFluxFormDataValidation仅开启WebFlux-Form-Data(URL encode)参数校验,参数注入 3. 使用@EnableJsonValidation仅开启Json参数校验 ```java //Json参数校验示例 //使用@NotNullForMap @PostMapping("/1") @NotNullForMap(params = { @ParamCheck(value = "personList",type = List.class,subParams = { @ParamCheckSub("id"), @ParamCheckSub("name"), @ParamCheckSub(value = "birth",type = Date.class,pattern = "yyyy-MM-dd",message = "生日错误"), }), @ParamCheck(value = "person",type = Map.class,subParams = { @ParamCheckSub("id"), @ParamCheckSub("name"), @ParamCheckSub(value = "birth",type = Date.class,pattern = "yyyy-MM-dd",message = "生日错误"), }) }) public String test1(@RequestBody Map param){ return param.toString(); } //WebFluxFormData参数注入校验示例 @PostMapping("/3") public Map test3( @ParamCheck(value = "birth",required = false,type = Date.class,pattern = "yyyy-MM-dd")String birth, @ParamCheck(value = "name",required = false)String name, @ParamCheck(value = "age",required = false,pattern = "[0-9]+")String age, @ParamCheck(value = "password",required = false)String password, @ParamCheck(value = "sign",required = false)String sign, @ParamCheck("id")List id, @ParamCheck("id1")List id1, @ParamCheck("id2")List id2, @ParamCheck("id3")List id3, @ParamCheck("id4")List id4, @ParamCheck("id5")List id5, @ParamCheck("id6")List id6, @ParamCheck("id7")Integer id7 ){ Map map = new HashMap<>(); map.put("birth",birth); map.put("name",name); map.put("age",age); map.put("password",password); map.put("sign",sign); map.put("id",id); map.put("id1",id1); map.put("id2",id2); map.put("id3",id3); map.put("id4",id4); map.put("id5",id5); map.put("id6",id6); map.put("id7",id7); return map; } ``` ​ 4.传递多个同名参数时请使用List、Set(去重)接收,默认为String类型,若集合中需要其它数据类型请参考如下例子: ```java @PostMapping("/6") public List test5(@ParamCheck(value = "id")List id){ return id; } ``` ![image-20200617140532231][id] [id]:data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAw4AAAH7CAYAAABlgsjOAAAgAElEQVR4nOzde3RU9b3//9fgzDATSNwxCeZiZAJeEm4KVqyA2MDvKEi1J6AoXrAi/upX+VVB6imW6lfLkVUPgrbBFU8RK0WxFInaxuApIYAIBxSCSkxEIYOxJJJgRi5hIIH8/sia7Uxuk4QZJpDnYy3WIvvy2e+9Z89n7/f+fD57LHv27GlwOBxyOp2y2+2yWq2yWCyyWCwCAAAAAEnqEekAAAAAAHR9JA4AAAAAgiJxAAAAABAUiQMAAACAoEgcAAAAAARF4gAAAAAgKBIHAAAAAEGROAAAAAAIisQBAAAA6AYaGhpOa31rexc8deqUKioqVFtbe9obRWTZ7XadOHEi0mEAAADgDLLb7bLb7UpMTFSPHu1vP3jsPa/e/KS+/YlDRUWFTp06pYSEhA5tCF1PZWWlEhMTIx0GAAAAzqBTp07p0KFDqqioUEpKSrvWeew9r5Z8VCepA12VamtrFR0dTdIAAAAAnIV69OihmJgY1dXVtbsH0Zuf1P+wfns31NDQQNIAAAAAnMV69OihEydOyGKxtGv5Iyd+SDDIBAAAAAAEReIAAAAAICgSBwAAAABBkTgAAAAACIrEAQAAAEBQJA4AAAAAgiJxAAAAABAUiQMAAACAoEgcAAAAAARF4gAAAAAgKBIHAAAAAEFZIx0AurZDhw7p1Vdf1X333aeYmJiQll1eXq78/Hzde++9OnDggPn/nj17hnQ7LTl+/LhycnL02WefSZKmTJmisWPHBp136NAhPffcc6qsrJQkzZw5UwMHDgw6z1fua6+9pvHjxys1NTVs+1ZQUCBJZszLly/X+vXrm+0LAABAR4QlcWh64+V0OnX11Vfr1ltvVVRUlCTpu+++06pVq7Rz506dOHFCffr00eTJk3XFFVfIYrHo5MmT2rhxo9555x0dOXJE8fHxGjdunBISErRo0aJm2+zdu7cee+yxsN6Q4dyxadMmxcXFacmSJTp06JAWL16syy67TKmpqW3Oe/fdd5WZmamxY8eqvLxcy5cvV2pqqmJiYtqcJ0kHDhyQJPXp0yds+3X8+HHt2bNH48ePl9SYNEjSkiVLwrZNAADQPYS1xSErK0vXXXed/vWvf2nZsmXKz8/XpEmTVFNToz/+8Y/q2bOnZs+erdjYWG3dulVLlizRlClTNHLkSJWUlOitt97SnXfeqYEDB6qsrExOp1P9+/fXwoULdeLECb322muKjY3VrbfeKovFYiYlgCQVFxdLUsBTf6n5zXVMTIxuueUWbdiwQbfddlur82655RYdPHhQt9xyiyQpNTVVw4cP10cffaSrr7661Xm+J/y7d+9W//791bNnT5WXl+vrr7/WyJEjO71/eXl5uu666wJagvyTk/LyctXW1uree+/t9DYAAAB8wpo4OBwOxcTEKCYmRgMHDtQ333yj48ePa8eOHfJ6vXr44YcVHx8vSbrxxht15MgRFRYW6sorr9S3336rPn36aMiQIerdu7euvPJKs9yYmBgdP35cVqtVdrs95F1ouqKNGzfq008/bXHekCFDNHr06DMSR9PWpMGDB+vBBx80uxf5d4vxzdu0aZNWrFghqe2WoWPHjmnhwoXas2ePJOknP/mJ7r777qDbLS4uDmiFmjJlihITEwOmzZw5U0VFRUpKStKoUaNCfViCOnTokHbt2qX77rtP5eXlev7553XkyBG9+uqrZvch//1ITEzU448/rpiYmBb3r6KiQuvXr1dubm7Ashs2bNDIkSPVs2dPHTp0SCkpKeZxo1UOAACcjjMyxuHAgQPas2ePBg0aJJvNpn379qlv374yDMNcxmKxKCMjQ5s2bdJ3332n/v376+9//7vefPNNTZw4URdccMGZCLXLGj16tGpqalReXh4wPTU19YwlDZL0t7/9TYMGDdIjjzwiqTFR+Nvf/qa7777b7FvftFvM2LFjzafuxcXF2rBhg5kQ+CsrK9MDDzyggQMHml2EysvLlZqa2up2b7vtNhUVFWnhwoXNEkhfAuFrcSgqKpIk9ezZU1FRUdq9e7dSU1N1/PhxrV27VnFxcUHnSY1jM3wxFhYWKjMzs815vulxcXFmIv3AAw+osrLSPC7l5eX68MMPtXjxYrNF4s0339SUKVNa3L/jx49Lkm655RZz+qFDh3Tw4EEzMaisrNQ///lPPfbYY3rkkUdUXFys1atXByR6AAAA7RXWxGHFihVasWKFevTooSuuuEI33HCD6urqdPjwYcXFxclqbX3zffv21cMPP6zXX39dc+bM0Y9//GPdeuutio6ODmfIXdrYsWO1atUqHTlyRFLj0/szOdDVd2Pq644jSddff73y8/N1+PDhgC4+/goKCswWB6mx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AEGROAAAAAAIisQBAAAAQFAkDgAAAACCInEAAAAAEBSJAwAAAICgSBwAAAAABEXiAAAAACAoEgcAAAAAQZE4AAAAAAjqrE0c3G637r33XhUVFamhoUF5eXmaPn269u7dq6KiImVlZZn/5s2bp/Xr12vq1KnavXu3JGn79u265557VFxcHOE9AQCpqKhIU6dO1VdffSVJOnnypBYvXqx58+bJ6/WqoaFBr732mrKysvS3v/3NXM+/LvSXk5Njrusr/95775Xb7ZbX69W8efMC6smm6wPA6fLVT1lZWZo0aZJ++ctfatu2bWpoaJDUWE/510N5eXmqra3VSy+9pFtvvVV33HGHFi9erGPHjunkyZPKz8/X/fffr6ysLD300EP65JNPmm3j8ccf19dff22W76sH/e8Nb731Vv3xj3/U999/r7y8vIAYsrKyNGPGDH322WcBdevx48f1+uuv66677jK379sXX506adIkrVu3TpLMaXl5eZE5+GFijXQAobB9+3a9/vrrmjFjhvr166eioiJFR0frV7/6lVJTU2W1WnXeeedp06ZNev/995WcnKz8/HwNHz5c6enpkQ4fANS/f38lJCToiy++0CWXXKLvvvtOn3/+ubKysuRwOFRVVaWPPvpIV111lbZt26bx48erd+/ep7XNzMxMTZ06VZLUq1evUOwGADTz2GOP6dJLL9U//vEPvfDCC/rVr36loUOHSpKGDBmihx9+WHa7XQ6HQzt27NDWrVv1m9/8Rna7XTU1NbLb7dqwYYNeffVV3XrrrRo5cqRKS0uVlJSk2tpacxvJycl68cUX9de//lWPPvposzh894b19fV64YUXlJKSoptuukkjR47U2rVrtW7dOv3617+WYRg6ePCgud7Jkyf1xhtvaO3atbrvvvs0cOBAvfXWW1q4cKF++9vfqn///pKk8847T++8846GDBly2vVzV3XWtjj4lJeX67//+781duxYXXPNNeZ0i8Wi6OhoGYah3r17y+l0KisrSx9//LFWrFihPXv2aPz48TrvvPMiGD0ANIqOjtaQIUNUVFQkr9erb775RidOnFBGRoYkac+ePZKkm2++WUeOHFFZWdlpb9Nut8swDBmGIZvNdtrlAUBLevXqpQsvvFB33XWXLr/8cq1du1Z1dXWSJJvNppiYGBmGIYfDoR49eqiurk7ff/+90tPT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 5.使用正则表达式,只需在pattern中设置即可,当需要验证日期格式时,指定type = Date.class,并指定需要的格式即可: 使用集合的情况下,所有元素都会进行校验 ```java //一般正则 @PostMapping("/6") public List test5(@ParamCheck(value = "id",pattern = "^[1-9]\\d*$")List id){ return id; } //校验日期 @PostMapping("/5") public String test5(@ParamCheck(value = "id",required = true,pattern = "yyyy-MM-dd",type = Date.class)String id){ return id; } ``` 6.自定义出现校验错误返回的Vo对象: 实现JsonResponse接口,注入Bean容器,并添加@Response(type = 注明VO.class) 框架处理完成的错误信息会返回一个String解析这个String即可 ```java @Component @Response(type = NewJsonMessage.class) public class NewJsonMessageJsonResponse extends BaseController implements JsonResponse { //参数错误会调用此方法 @Override public NewJsonMessage response(String input) { return JsonMsgContent(HttpStatusFly.ERROR_PARAMETER_INACCURACY,input.split(Constants.COMMA)[1]); } //出现其它错误会调用此方法 @Override public NewJsonMessage defaultResponse(Class... classes) { return JsonMsgContent(HttpStatusFly.SERVICE_ERROR); } } ``` .[![](https://jitpack.io/v/com.gitee.yuygoi/param-validation.svg)](https://jitpack.io/#com.gitee.yuygoi/param-validation)