【发布时间】:2020-07-21 17:33:15
【问题描述】:
我有一个带有该方法的 Spring Boot REST 控制器
@GetMapping(value = "/validate", produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
@ResponseBody
public Result validate(
@ApiParam(value = "http://example.org/test", required = true) @RequestParam String iri,
@Context HttpServletRequest request
) {
return service.validate(iri);
}
...
并且自定义对象映射器配置为(Result 类是第三方库的一部分)
@Bean
public ObjectMapper objectMapper() {
ObjectMapper mapper = new ObjectMapper();
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
mapper.configure(MapperFeature.DEFAULT_VIEW_INCLUSION, true);
SimpleModule module = new SimpleModule();
module.addSerializer(Result.class, new ResultSerializer());
mapper.registerModule(module);
return mapper;
}
在ResultSerializer(我的自定义实现)内部,我需要根据Accept-language 标头(例如,来自边界HttpServletRequest)自定义序列化输出。我目前只能通过不对ObjectMapper 使用 Spring 注入来解决,在我的控制器中显式创建一个 ObjectMapper 实例,执行它并返回输出。所以:
可以在ObjectMapper实例中获取Accept-language标头作为Spring bean注入吗?
【问题讨论】:
-
您具体想定制什么?
-
我正在尝试根据请求中的参数(在本例中为 Accept-Language 标头)更改 ObjectMapper 的行为。我的问题是 ObjectMapper 示例不是请求范围的,所以我不确定如何将传入的 HTTP 请求标头作为参数传递给它们。
-
您具体想改变什么行为?这不是最佳做法。
标签: java spring spring-boot jackson