首页 > 解决方案 > JsonDeserialize 构建结果到 json

问题描述

我有以下代码

AttackPattern attackPattern1 = AttackPattern.builder()
                 .name("Spear Phishing")
                 .description("tack desc")               
                 .build();

AttackPattern 类是:

@JsonDeserialize(builder = AttackPattern.Builder.class)
@JsonTypeName("attack-pattern")
public class AttackPattern  {
    
    public static Builder builder() {
        return new Builder();
    }
            
    private String type;        
    private String id;
    private StixInstant createdByRef;
    private StixInstant created;
    private StixInstant modified;
    private String labels;
    private Set<ExternalReference> external_references;
    
    
    private String name;
    private String description;
    private Set<KillChainPhaseType>  killChainPhases;
    
    private  AttackPattern(String name ,     String  description  ,       Set<KillChainPhaseType> killChainPhases) {
        this.name = name;
        this.description = description;
        this.killChainPhases = killChainPhases;     
    }
    
    
    @JsonPOJOBuilder(withPrefix = "set")
    public static class Builder
      {
            
         String name;
         String description;
         Set<KillChainPhaseType>  killChainPhases;
        
        public Builder name(String name) {
            this.name = name;
            return this;
        }
        
        public Builder description(String description) {
            this.description = description;
            return this;
        }
        
        @JsonProperty("kill_chain_phases")
        public Builder killChainPhases(Set<KillChainPhaseType> killChainPhases) {
            this.killChainPhases = killChainPhases;
            return this;
        }
        
        
        public AttackPattern build() {
            return new AttackPattern(name,description,killChainPhases);
        }
      }

    
     public String toJsonString() {
            try {
                                
                ObjectMapper mapper = new ObjectMapper();
                String user_s= mapper.writeValueAsString(this);
                ObjectNode json = (ObjectNode) mapper.readTree(user_s);
                return json.toString();
            } catch (IOException e) {
                throw new IllegalStateException("Cannot process JSON", e);
            }
        }

    
    
    public String toString() {
        return "AttackPattern [name=" + name + ", description=" + description + ", killChainPhases=" + killChainPhases
                + "]";
    }
    
}
    

但是当我想将结果转换为 json

attackPattern1.toJsonString()

结果是空的。我不知道如何解决它。

在下面的行中它清空它

String jsattack= mapper.writeValueAsString(this);

“这个”的价值是

AttackPattern [name=Spear Phishing, description=tack desc, killChainPhases=null]

我究竟做错了什么?

提前谢谢你安娜

标签: javajsonserializationjackson

解决方案


为类字段添加getter方法。AttackPattern然后它应该工作。


推荐阅读