Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Jackson-序列化时的转换字段值_Java_Json_Spring Boot_Jackson - Fatal编程技术网

Java Jackson-序列化时的转换字段值

Java Jackson-序列化时的转换字段值,java,json,spring-boot,jackson,Java,Json,Spring Boot,Jackson,在使用AngularJS前端的Spring Boot应用程序中,“Pin”字段值必须在序列化时变黑,即,如果POJO中的Pin字段值为null,则相应的JSON字段必须保持空白;如果字段值包含数据,则必须将其替换为“***”字符串 Jackson是否提供了完成此任务的功能?您可以像下面这样轻松完成此任务,而无需任何自定义序列化程序 public class Pojo { @JsonIgnore private String pin; @JsonProperty("pin

在使用AngularJS前端的Spring Boot应用程序中,“Pin”字段值必须在序列化时变黑,即,如果POJO中的Pin字段值为null,则相应的JSON字段必须保持空白;如果字段值包含数据,则必须将其替换为“***”字符串


Jackson是否提供了完成此任务的功能?

您可以像下面这样轻松完成此任务,而无需任何自定义序列化程序

public class Pojo {
    @JsonIgnore
    private String pin;

    @JsonProperty("pin")
    public String getPin() {
        if(pin == null) {
            return "";
        } else {
            return "***";
        }
    }

    @JsonProperty("pin")
    public void setPin(String pin) {
        this.pin = pin;
    }

    @JsonIgnore
    public String getPinValue() {
        return pin;
    }

}

您可以使用
Pojo.getPinValue()
来获取准确的值。

您可以像下面这样轻松地完成,无需任何自定义序列化程序

public class Pojo {
    @JsonIgnore
    private String pin;

    @JsonProperty("pin")
    public String getPin() {
        if(pin == null) {
            return "";
        } else {
            return "***";
        }
    }

    @JsonProperty("pin")
    public void setPin(String pin) {
        this.pin = pin;
    }

    @JsonIgnore
    public String getPinValue() {
        return pin;
    }

}

您可以使用
Pojo.getPinValue()
获取准确的值。

尝试以下示例

public class Card {
    public int id;
    public String pin;
}

public class CardSerializer extends StdSerializer<Card> {

    public CardSerializer() {
        this(null);
    }

    public CardSerializer(Class<Card> t) {
        super(t);
    }

    @Override
    public void serialize(Card value, JsonGenerator jgen, SerializerProvider provider) 
      throws IOException, JsonProcessingException {
        jgen.writeStartObject();
        jgen.writeNumberField("id", value.id);
        jgen.writeStringField("pin", "****");
        jgen.writeEndObject();
    }
}

您可以在这里做一些改进,比如直接在类上注册序列化程序,但是您可以在第4节阅读更多关于它的内容-

尝试以下示例

public class Card {
    public int id;
    public String pin;
}

public class CardSerializer extends StdSerializer<Card> {

    public CardSerializer() {
        this(null);
    }

    public CardSerializer(Class<Card> t) {
        super(t);
    }

    @Override
    public void serialize(Card value, JsonGenerator jgen, SerializerProvider provider) 
      throws IOException, JsonProcessingException {
        jgen.writeStartObject();
        jgen.writeNumberField("id", value.id);
        jgen.writeStringField("pin", "****");
        jgen.writeEndObject();
    }
}

这里可以做一些改进,比如直接在类上注册序列化程序,但您可以在第4节中了解更多信息-

您需要客户序列化程序来查看此处-您需要客户序列化程序来查看此处-而Anton Belev发布的方法在架构方面更为清晰,我更喜欢这个,因为它是一个快速而小的解决方案:-)虽然安东·贝列夫(Anton Belev)发布的方法在架构方面会更干净,但我更喜欢这个,因为它是一个快速而小的解决方案:-)这是正确的方法。这是正确的方法。