gpt4 book ai didi

java - 如何使注入(inject)的对象映射器输出特定于区域设置

转载 作者:行者123 更新时间:2023-12-01 17:31:25 25 4
gpt4 key购买 nike

我有一个带有该方法的 Spring Boot REST Controller

  @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 header (例如来自边界HttpServletRequest)自定义序列化输出。我目前只能通过不使用 Spring 注入(inject)来解决 ObjectMapper,在我的 Controller 中显式创建一个 ObjectMapper 实例,执行它并返回输出。所以:

可以在作为 Spring bean 注入(inject)的 ObjectMapper 实例中获取 Accept-language header 吗?

最佳答案

一种可能性(不确切知道您要自定义什么):您可以尝试将 ResultSerializer 设置为 request-scoped

@Bean
@RequestScope
public ResultSerializer resultSerializer() {
return new ResultSerializer();
}

然后您只需将 HttpServletRequest 注入(inject) ResultSerializer 即可。

public class ResultSerializer {

@Autowired
private HttpServletRequest request;

}

关于java - 如何使注入(inject)的对象映射器输出特定于区域设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61115370/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com