gpt4 book ai didi

java - 解析headers信息并设置到bean中

转载 作者:行者123 更新时间:2023-11-30 07:46:11 31 4
gpt4 key购买 nike

在我的 spring rest 应用程序中,我需要读取 PUT 的 header 信息和 POST调用并在作为 @RequestBody 传递的 bean 中设置这些信息.目前正在做的事情如下。

@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)中的 header 并在不同实体中设置值。

我的问题是有什么方法可以解析/override @RequestBody在全局级别的方法参数中并设置这些 header ?

最佳答案

您可以使用RequestBodyAdvice:

例如:

bean 类:

@Data
public class MyBean {
private String property;
}

Controller :

@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"}

关于java - 解析headers信息并设置到bean中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50871204/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com