java - 解析headers信息并在bean中设置
问题描述
在我的 spring rest 应用程序中,我需要读取PUT
和POST
调用的标头信息,并将这些信息设置为传递为@RequestBody
. 目前正在做的事情如下。
@RequestMapping(value = "/create", method = RequestMethod.POST)
@ResponseStatus(value = HttpStatus.OK)
@ResponseBody
public ReportRepresentation createDailyReport(@RequestBody ReportEntity reportEntity,
@RequestHeader(value= "FIRST_HEAD1", required = false) boolean isHeaderSet,
@RequestHeader(value= "SECOND_HEAD2", required = false) Long scondHead) {
// Setting the header values into bean properties .
}
因此,我正在提取所有方法(POST 和 PUT)中的标题并在不同实体中设置值。
我的问题是有没有办法在全局级别解析/ override
in@RequestBody
方法参数并设置这些标头?
解决方案
您可以使用RequestBodyAdvice
:
例如:
豆:
@Data
public class MyBean {
private String property;
}
控制器:
@RestController
public class MyController {
@RequestMapping("/")
public MyBean get(@RequestBody MyBean myBean) {
return myBean;
}
}
顾问:
@ControllerAdvice(annotations = RestController.class)
public class MyRequestBodyAdvisor extends RequestBodyAdviceAdapter {
@Override
public boolean supports(MethodParameter methodParameter, Type type, Class<? extends HttpMessageConverter<?>> aClass) {
return methodParameter.getParameterType() == MyBean.class;
}
@Override
public Object afterBodyRead(Object body, HttpInputMessage inputMessage, MethodParameter parameter, Type targetType, Class<? extends HttpMessageConverter<?>> converterType) {
MyBean myBean = (MyBean)body;
List<String> strings = inputMessage.getHeaders().get("X-Property");
myBean.setProperty(strings.get(0));
return myBean;
}
}
测试:
$ curl localhost:8080 -d '{}' -X POST -H 'X-Property: myProp' -H 'Content-Type: application/json' -s
输出:
{"property":"myProp"}
推荐阅读
- mysql - 从 phpmyadmin 备份时转义 CREATE DEFINER=`root`@`localhost`
- cmake - CMake 中 ${${arg}} 的含义?
- javascript - 如何从 javascript 关闭 SQlite 数据库
- html - 如何在轮播中使横向和纵向图像完全响应且高度相同?
- flutter - UserUpdateInfo 未定义名称“用户”
- amazon-web-services - 无服务器模板上 EC2 元数据上的 !Sub 和 !GetAtt 问题
- r - 强大的 R 函数
- sql - 查找每日注册用户
- javascript - 如何从自身多次调用的函数中返回值?
- c# - RDLC 导出没有 pdf 中的分页符