【问题标题】:How To Disable a Field From Response based on Environment如何根据环境从响应中禁用字段
【发布时间】:2015-09-17 05:50:02
【问题描述】:

上下文: 使用 POJO 发送响应的 Spring REST Web 服务(例如:Output.java) 现在,Output.java 包含 2 个字段 -

@JsonProperty("One")
private String one;
@JsonProperty("Two")
private String two;

所以在回复中我得到了这两个字段。

问题: 如何在我的 PROD 环境中禁用字段属性“二”?

【问题讨论】:

  • 没有任何注释或声明阻止属性基于环境序列化。您可以在将代码部署到 PROD 时添加 @JsonIgnore 注释。

标签: java spring rest jackson spring-profiles


【解决方案1】:

JsonSerialize.Inclusion.NON_NULL声明你的Output.java

@JsonSerialize(
include=JsonSerialize.Inclusion.NON_NULL)
public class Output {

}

如果您没有在 Output.java 中填充属性“two”,则此属性不会出现在您的最终休息响应中。

【讨论】:

  • 无论如何我都需要填充该字段以进行日志记录。所以不能只为 PROD 将其设为 NULL。
  • 在私有字段二上使用@JsonIgnore注解。
  • 使用@JsonIgnore 时,DEV 环境也会忽略它。我只是希望仅对 PROD 忽略它。
  • 正如 StanislavL 所说,使用 JSonSerializer 或使用 @JsonFilter
【解决方案2】:

您可以为该类定义自定义 JsonSerializer 并检查它是否在序列化程序中为 PROD 并跳过该字段。查看示例here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-10
    • 2015-09-27
    • 1970-01-01
    • 2013-10-13
    • 2022-12-15
    • 1970-01-01
    相关资源
    最近更新 更多