【发布时间】:2020-03-02 16:42:27
【问题描述】:
我正在尝试与另一个具有非常具体的集成参数的系统进行交互。他们没有编写任何代码来忽略大小写敏感性,长话短说,对于我试图发出的一个帖子请求,他们期望一个 JSON 正文,其字段名称为 Pascal 大小写而不是 Camel Case,并且请求在没有 Pascal 的情况下失败.我们正在使用 WebClient 发送集成调用,因此我们可以在代码中支持响应式流。据我所知,当我使用 WebClient 序列化为 JSON 时,请求被转换为使用 Camel Case,这是我通常想要的。
如何将其序列化为 Pascal?我尝试研究的所有内容最终都会让我进入 .NET 领域,但我不是用 C# 编写的。我是用 Java 写的。
//For example:
{"originTypeCode":"US","camelCaseFieldName":"FAILED"} // FAILURE
{"OriginTypeCode":"US","PascalFieldName":"SUCCESS"} // SUCCESS
我有两个想法:
1) 这似乎不太理想,但可能更直观。这个想法是先将我要发布的对象转换为 JSON,然后使用解析器将所有字段从 Camel Case 转换为 Pascal,然后尝试使用我的 WebClient 方法发布。这似乎不是最理想的方法。我想可能会有更清洁的东西。
2) 第二个想法是我的 WebClient 实例使用 Jackson 序列化程序进行序列化。我想如果我要创建一个新的 WebClient/Jackson ObjectMapper Bean,也许我可以编写一个自定义转换器来专门用于这个集成流程。这看起来可能更干净,但是通过 WebClient 及其构建方法进行挖掘,很难弄清楚如何实现这一点。下面我发布了我当前定义的bean。深入研究这种东西对我来说很新鲜,所以我不确定需要改变什么或在哪里改变。 WebClient bean 来自 WebClientConfig 类,ObjectMapper 来自我的 JacksonConfig 类。
@Bean
public WebClient webClient() {
return WebClient.builder().clientConnector(getClientHttpConnector()).build();
}
@Bean
@Primary
public ObjectMapper objectMapper(Jackson2ObjectMapperBuilder builder) {
ObjectMapper objectMapper = builder.createXmlMapper(false).build();
objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
return objectMapper;
}
我当然也愿意接受其他建议。
【问题讨论】:
-
这些非常有帮助,谢谢!
标签: java json webclient pascal