@RequestBody 对象上的 WebRequest

WebRequest on @RequestBody object

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

我还使用@RequestBody 传入一个 JSON 对象,该对象描述了应该获取哪些数据以及如何获取数据。

是否可以让Spring直接在@RequestBody对象上自动设置WebRequestEntriesRequestDTO(我会在 EntriesRequestDTO 上创建一个 WebRequest 字段)。这将使我能够隐藏一些复杂性,因为我经常需要从 WebRequest.

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

您可以使用 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();
}

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

我最终制作了一个自定义的 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 方法。