有了杰克逊,一个字段上的注释@JsonProperty("a")
会将其名称序列化为a
。有了Gson,这就像@SerializedName("a")
一样。
注释类的所有序列化字段并使用默认的Jackson设置将导致缩小的JSON响应,这是我们想要实现的。
这显然会使响应变得模糊,因此将其作为可选项会很好。对于非生产配置文件,应关闭缩小,而生产配置文件应使用缩小版本。
该应用程序使用Spring Boot 2(REST + Data)和Java 8,目前正在与Jackson进行序列化,但可以改变。构建是通过Maven完成的。
我们可以使用Spring或Maven配置文件。
猜测:
无论如何,问题是如何使JSON缩小基于配置,可切换。
缩进不是问题。也许我的问题不明确。问题是关于缩小字段名称。非产品,我想要“someLongFieldName”:1。使用prod配置文件,“s”:1。
您可以使用占位符。使用@JsonProperty("${your.property}")
而不是@JsonProperty("a")
。 Spring引导将评估表达式并用适当的String替换它。
那么,让我们有dev和prod配置文件。要禁用JSON缩小开发配置文件,只需使用config添加文件application-dev.properties:
spring.jackson.serialization.indent_output=true
或者使用Java配置:
@Configuration
@Profile("dev")
public class DevJacksonConfig {
@Bean
public Jackson2ObjectMapperBuilder objectMapperBuilder() {
Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder();
builder.indentOutput(true);
return builder;
}
}
我不知道你需要做什么,但我认为它是一种代码味道。
根据环境使用不同的密钥(在我们的例子中,dev和prod,但它可以有更多)根据环境使您的API不同。但是,内容实际上是相同的。因此,根据部署的API配置文件,您将对同一请求有不同的响应。
然后,API的任何消费者都应该知道混淆密钥的真正含义。更糟糕的是:无论使用什么配置文件,他们都必须处理混淆和“正常”密钥以便能够与API通信。
它还将使测试和API doc生成(swagger等)变得更加困难。
我强烈建议坚持使用命名良好的密钥并使用压缩响应(例如gzip格式)。