Java Webclient:如何序列化为 Pascal JSON?

Java Webclient: How to serialize to Pascal JSON?

我正在尝试与另一个具有非常具体的集成参数的系统进行交互。他们没有编写任何忽略大小写敏感性的代码,长话短说,对于我试图提出的 post 请求,他们期望 JSON 正文中的字段名称采用 Pascal 大小写而不是驼峰式大小写,请求在没有 Pascal 的情况下失败。我们正在使用 WebClient 发送集成调用,因此我们可以在我们的代码中支持反应流。据我所知,当我使用 WebClient 序列化为 JSON 时,请求被转换为使用 Camel Case,这是我通常想要的。

如何将其序列化为 Pascal?我尝试研究的所有内容最终都让我进入了 .NET 领域,但我不是用 C# 编写的。我写在 Java.

//For example:
{"originTypeCode":"US","camelCaseFieldName":"FAILED"}     // FAILURE
{"OriginTypeCode":"US","PascalFieldName":"SUCCESS"}       // SUCCESS

我有两个想法:

1) 这似乎不太理想,但也许更直观。我的想法是首先将我尝试 post 的对象转换为 JSON,然后使用解析器将所有字段从 Camel Case 转换为 Pascal,然后尝试 post 我的Web 客户端方法。这似乎不是执行此操作的最理想方法。我想可能会有更干净的东西。

2) 第二个想法是我的 WebClient 实例使用 Jackson 序列化程序进行序列化。我想如果我要创建一个新的 WebClient/Jackson ObjectMapper Bean,也许我可以编写一个自定义转换器来专门用于此集成流程。这看起来可能更干净,但是通过 WebClient 及其构建方法进行挖掘,很难弄清楚如何实现这一点。在下面,我 post 正在使用我当前定义的 bean。深入研究这种事情对我来说是很新鲜的,所以我不确定需要更改什么或在哪里。 WebClient bean 来自 WebClientConfig class 而 ObjectMapper 来自我的 JacksonConfig class.

@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;
}

我当然也愿意接受其他建议。

@GriffeyDog 的评论帮助我弄清楚了我需要做什么。对于遇到此问题的任何人,解决方案如下:

如果你想让某些class以特定的方式序列化,你可以给class本身加上注解@JsonNaming,然后指定一个命名策略,列表可以是在这里找到:https://java-focus.com/jackson-property-naming-strategy/。对于我的用例,我使用了 PropertyNamingStrategy.UpperCamelCaseStrategy.

@JsonNaming(value = PropertyNamingStrategy.UpperCamelCaseStrategy.class)
public class MyPascalSerializedClass {}
//All fields in this class will serialize to "UpperCamelCase" instead of "normalCamelCase".

此外,如果您想指定某些字段,您甚至可以使用@JsonProperty 注释来覆盖class 注释。例如,我的 class 中有一个字段必须映射到不符合任何标准约定的 JSON 格式,因此我能够使用它。

@JsonProperty("ULDNumber")
private String uldNumber
//This field will serialize to the specified "ULDNumber".

这是 com.fasterxml.jackson 库的全部内容。有关更多文档,您可以参考上面的 link 和以下内容:https://fasterxml.github.io/jackson-databind/javadoc/2.7/com/fasterxml/jackson/databind/PropertyNamingStrategy.UpperCamelCaseStrategy.html