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

标签 java spring spring-mvc

在我的 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/

相关文章:

java - 无法从 zk 列表框中检索值

Spring Data JPA 流查询方法导致事务异常

java - Controller 单元测试无法 Autowiring 所需的 bean

java - 加载的记录不是最新的。使用 Hibernate 和 OpenSessionInViewFilter

java - 我可以在同一个 URI 上配置 HTML 和 Spring Data REST JSON 吗?

java - 沿墙滑动的瓷砖碰撞

java - J2EE 7 Rest 客户端中的属性而不是值

java - 为什么这个 int 不递增?

java - 异常没有这样的bean定义

Spring LDAP - 在独立 java 程序中创建 LdapTemplate - 使用 Spring LDAP 作为 CDI 资源