@RequestBody对象上的WebRequest

时间:2015-07-22 09:42:02

标签: java spring spring-mvc spring-boot spring-restcontroller

在Spring MVC中。我可以使用 WebRequest 作为自动设置的参数(以及其他内容,例如 Locale 等)。

我也在使用@RequestBody传入一个JSON对象,该对象描述了应该获取数据的内容和方式。

是否有可能让Spring直接在 @RequestBody 对象 EntriesRequestDTO 上自动设置 WebRequest (我会做一个 EntriesRequestDTO 上的WebRequest 字段。这将允许我隐藏一些复杂性,因为我经常需要从 WebRequest 获取属性。

 @RequestMapping(value = "/entries", method = { RequestMethod.POST })
    public EntriesDTO getEntries(@RequestBody EntriesRequestDTO request, WebRequest webRequest){
   ...
}

2 个答案:

答案 0 :(得分:0)

您可以使用AOP将WebRequest设置为DTO

@Around("execution(* (com.your.company..*).*(..))")
public Object invoke(ProceedingJoinPoint joinPoint) throws Throwable {
  final Object[] args = joinPoint.getArgs();
  //get args[0] and args[1]
  return joinPoint.proceed();
}

确保正则表达式正确(或添加自定义注释),检查强制转换异常。

答案 1 :(得分:0)

我最终制作了一个自定义的HttpMessageConverter。这不是一个非常通用的解决方案,但它对我有用:

@Configuration
public class WebConfiguration extends WebMvcConfigurationSupport {
    @Bean
    public DTOJackonMessageConverter customJackson2HttpMessageConverter() {
        return new DTOJackonMessageConverter();
    }

    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        converters.add(customJackson2HttpMessageConverter());
        super.addDefaultHttpMessageConverters(converters);
    }
}

DTOJacksonMessageConverter 扩展 MappingJackson2HttpMessageConverter 并覆盖读取方法。