自定义注解获取请求参数
时间: 2023-08-26 15:16:54 浏览: 72
自定义注解可以用来获取请求参数。可以通过实现HandlerMethodArgumentResolver接口来自定义解析器,该解析器用于处理特定的参数注解。在该解析器中,可以使用requestbody来接收请求参数,并通过二次取值来获取对应的值。例如,可以使用JsonField注解来指定需要获取的参数值。在解析器中,可以通过读取请求体的内容,并使用JSONPath来解析出对应的值。
以下是一个示例代码,演示了如何使用自定义注解获取请求参数:
```java
public class JsonFieldArgumentResolver implements HandlerMethodArgumentResolver {
@Override
public boolean supportsParameter(MethodParameter parameter) {
return parameter.hasParameterAnnotation(JsonField.class);
}
@Override
public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception {
HttpServletRequest request = (HttpServletRequest) (webRequest.getNativeRequest());
BufferedReader br = request.getReader();
String str, reqStr = "";
while ((str = br.readLine()) != null) {
reqStr = str;
}
return JSONPath.read(reqStr, "$." + parameter.getParameterAnnotation(JsonField.class).value());
}
}
```
在Controller中,可以使用@JsonField注解来指定需要获取的参数值。例如:
```java
@RequestMapping(value = "/test", method = RequestMethod.POST)
public ResponseResult test(@JsonField("name") String name) {
System.out.println("request: " + name);
return new ResponseResult(ResponseCode.SUCCESS.getCode(), ResponseCode.SUCCESS.getMsg(), name);
}
```
这样,在请求中传递的参数会被解析器自动处理,并将对应的值注入到方法参数中。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *2* *3* [自定义注解实现获取requestbody中指定参数](https://blog.csdn.net/m0_46444563/article/details/124235335)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"]
[ .reference_list ]