0

在 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){
   ...
}
4

2 回答 2

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覆盖了 read方法。

于 2015-07-22T12:36:36.433 回答
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();
}

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

于 2015-07-22T10:12:05.277 回答