使用SPEL用spring mvc

时间:2017-08-30 10:04:27

标签: java spring spring-mvc

我有一个带有restful endpoint / widget / {id}的Web应用程序。

此端点采用更新DTO并调用服务层来执行更新。

我目前从JSON主体中提取更新的数据。但是,该服务需要的数据比JSON正文包含的数据多,例如当前用户和URL中的id。

目前我的控制器方法看起来像

@RequestMapping(value = "/{id}", method = RequestMethod.PUT)
public WidgetResponseDto update(@RequestBody WidgetUpdateDto widgetUpdate,
                                    @PathVariable("id") Long id,
                                    @CurrentOrganisationId Long organisationId)

并且控制器的第一项工作是将这些数据转换为单个对象。然后在整个应用程序中重复此模式。

我的问题是:如何从路径中获取参数,或者从SecurityContext获取参数并直接在我的DTO中使用它。

理想情况下,我希望能够在我的业务对象中使用SPEL来填充这些字段以及使用Jackson填充其他字段。

这是否支持开箱即用?如果不是,我最好写一个自定义HttpMessageConverter

1 个答案:

答案 0 :(得分:0)

您可以通过@RequestHeader注释访问请求标头:

RequestMapping(value = "/{id}", method = RequestMethod.PUT)
public WidgetResponseDto update(@RequestBody WidgetUpdateDto widgetUpdate,
                                @PathVariable("id") Long id,
                                @CurrentOrganisationId Long organisationId,
                                @RequestHeader("Host") String host,
                                @RequestHeader(""Keep-Alive"") String keepAlive)

请求标头"主机"和#34; Keep-Alive"将分别通过hostkeepAlive变量提供。 有关详细信息,请参阅API