【问题标题】:Profile based, toggleable JSON minifying with Java, Spring基于配置文件的、可切换的 JSON 使用 Java、Spring 缩小
【发布时间】:2017-07-13 08:29:24
【问题描述】:

对于 Jackson,字段上的注释 @JsonProperty("a") 会将其名称序列化为 a。对于 Gson,这将作为 @SerializedName("a") 完成。

注释类的所有序列化字段并使用默认的 Jackson 设置将导致 JSON 响应缩小,这是我们想要实现的。

这显然会混淆响应,因此最好将其设为可选。对于非生产配置文件,缩小应关闭,而生产配置文件应使用缩小版本。

应用程序使用 Spring Boot 2 (REST + Data) 和 Java 8,目前使用 Jackson 进行序列化,但这可能会改变。构建是通过 Maven 完成的。

我们可以为此使用 Spring 或 Maven 配置文件。

猜测:

  • 删除注释并使用基于配置文件的 bean 配置 Jackson / Gson。不确定是否可行。

  • 当前未使用杰克逊注解。我可以从外部模块中加入我自己的实现,并根据配置文件在虚拟和真实之间切换,希望我的不会被自动配置。很脏,可能无法正常工作。

  • 复制响应实体,但这很难看且难以维护。

无论如何,问题是如何使 JSON 缩小基于配置,可切换。

【问题讨论】:

  • 您找到解决方案了吗?我想基于 Spring @Profile 有条件地反序列化字段,并想知道相同的解决方案是否可以解决这两个问题?
  • @dan.jones 还没有,不幸的是,这仍然是我面临的问题。
  • 这不是这个问题的真正目的。但是您可以使用 Jackson 创建 JSON 视图。您可以尝试通过将其链接到配置文件来告诉控制器要使用哪个视图。

标签: java json spring jackson


【解决方案1】:

缩进不是问题。也许我的问题不清楚。问题是关于缩小字段名称。非产品,我想要“someLongFieldName”:1。使用产品资料,“s”:1。

您可以使用占位符。使用@JsonProperty("${your.property}") 而不是@JsonProperty("a")。 Spring boot 将评估表达式并将其替换为适当的字符串。

【讨论】:

  • 这是对您引用的评论的回答还是回应?
  • 实际上,@Aron 留下的评论是为了澄清他的问题。所以,两者兼而有之。
  • 出于我在回答中提到的原因,我强烈建议您不要这样做。这将导致客户的可维护性和可用性方面的大问题。
【解决方案2】:

所以,让我们拥有 dev 和 prod 配置文件。要为开发配置文件禁用 JSON 压缩,只需添加文件 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;
    }
}

【讨论】:

  • 缩进不是问题。也许我的问题不清楚。问题是关于缩小字段名称。非产品,我想要"someLongFieldName" : 1。带有产品资料,"s":1.
【解决方案3】:

我不知道你需要做什么,但我认为这是一种代码味道。

根据环境使用不同的密钥(在我们的例子中是 dev 和 prod,但它可以有更多)使您的 API 根据环境而不同。但是,内容实际上是一样的。因此,根据部署的 API 配置文件,您将对同一请求有不同的响应。

API 的任何使用者都应该了解混淆密钥的真正含义。更糟糕的是:无论部署了什么配置文件,他们都必须处理混淆密钥和“普通”密钥才能与 API 通信。

这也会使测试和 API 文档生成(swagger 等)变得更加困难。

我强烈建议坚持使用命名良好的密钥并使用响应压缩(例如 gzip 格式)。

【讨论】:

    猜你喜欢
    • 2014-09-25
    • 2012-02-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-11
    • 1970-01-01
    • 2013-03-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多