【问题标题】:Override HttpMessageConverter for Spring RequestBody为 Spring RequestBody 覆盖 HttpMessageConverter
【发布时间】:2015-11-06 21:51:06
【问题描述】:

我有以下代码:

@RequestMapping(value="/mobile/device", method = RequestMethod.PUT)
public ResponseEntity<Void> flagDevice (@RequestBody List<MobileDeviceData> devicedataList, @RequestHeader(value="special_code") String specialCode) {
// Implementation details
}

创建的每个 MobileDeviceData 实例都需要使用 RequestHeader special_code 填充参数字段。

我将如何执行此操作,以便在调用 flagDevice 方法主体时将其完全填充?

提前致谢。

【问题讨论】:

    标签: java spring spring-mvc spring-boot


    【解决方案1】:

    这不是微不足道的。

    已经提供了一个 HttpMessageConverter 来反序列化 JSON,即 MappingJackson2HttpMessageConverter。它可以访问请求标头。您可以扩展该类以也使用标头进行反序列化(这通常很难做到,而不是仅用于MobileDeviceData)。

    你可以使用Spring AOP,拦截方法retrieve the arguments,转换成合适的类型,自己赋值。

    我想要的解决方案是最简单的:在处理程序方法中自己做。循环List 并使用相应的设置器为每个MobileDeviceData 设置specialCode

    另一种选择是专门为需要从标头值构造的List&lt;MobileDeviceData&gt; 参数定义自己的HandlerMethodArgumentResolver

    【讨论】:

    • 谢谢。在这种情况下,可能会选择简单的解决方案。
    猜你喜欢
    • 2014-10-26
    • 1970-01-01
    • 2023-01-09
    • 2018-05-02
    • 1970-01-01
    • 2016-03-09
    • 2013-03-12
    • 2010-11-15
    • 2015-05-01
    相关资源
    最近更新 更多