Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.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 Json仅在特定方法中忽略属性_Java_Json_Annotations_Jackson - Fatal编程技术网

Java Json仅在特定方法中忽略属性

Java Json仅在特定方法中忽略属性,java,json,annotations,jackson,Java,Json,Annotations,Jackson,我有一个类,如下所示: @Entity @Table(name = "so", schema = "public") public class So implements java.io.Serializable , IBusiness { private int idSo; private Set<PartOrder> partOrders = new HashSet<PartOrder>(); public So() { }

我有一个类,如下所示:

@Entity
@Table(name = "so", schema = "public")
public class So implements java.io.Serializable , IBusiness {

    private int idSo;

    private Set<PartOrder> partOrders = new HashSet<PartOrder>();

    public So() {

    }

    @Id
    @SequenceGenerator(name = "seqGenerator", sequenceName = "so_seq", allocationSize=1, initialValue=1)
    @GeneratedValue(generator="seqGenerator", strategy=GenerationType.SEQUENCE)
    @Column(name = "id_so", unique = true, nullable = false)
    public int getIdSo() {
        return this.idSo;
    }

    public void setIdSo(int idSo) {
        this.idSo = idSo;
    }

    @OneToMany(fetch = FetchType.LAZY, mappedBy = "so")
    public Set<PartOrder> getPartOrders() {
        return this.partOrders;
    }

    public void setPartOrders(Set<PartOrder> partOrders) {
        this.partOrders = partOrders;
    }


}
@实体
@表(name=“so”,schema=“public”)
public类实现java.io.Serializable,IBusiness{
私人国际开发署;
private Set partOrders=new HashSet();
公共So(){
}
@身份证
@SequenceGenerator(name=“seqGenerator”,sequenceName=“so_seq”,allocationSize=1,initialValue=1)
@GeneratedValue(generator=“seqGenerator”,策略=GenerationType.SEQUENCE)
@列(name=“id\u so”,unique=true,nullable=false)
public int getIdSo(){
返回此.idSo;
}
公共无效集合idSo(int idSo){
this.idSo=idSo;
}
@OneToMany(fetch=FetchType.LAZY,mappedBy=“so”)
公共集合getPartOrders(){
退回此订单;
}
公共作废设置零件订单(设置零件订单){
this.partOrders=零件订单;
}
}
我有一个方法返回一个带有SO的Json。但我不希望在响应json中包含partOrders属性。我在属性上使用@JsonIgnore,但现在,我有另一个方法接收SO对象,我需要获取partoder

问题是:有没有办法指定何时忽略属性(在特定方法中)


提前感谢

为类放置jSON忽略注释。我想它会满足你的要求。你可以把不需要的东西留在这里

@JsonIgnoreProperties(ignoreUnknown = true)
class ClassName{

}

您可以通过将Json过滤器与
FilterProvider一起使用来实现这一点

  • 您可以使用注释为POJO指定过滤器名称
  • 在序列化之前,将的实例附加到筛选器名称。该类有两个工厂方法用于基于属性名称工作的过滤器
  • 以下是注释声明的示例:

    @JsonFilter("filter properties by name")
    public class So {
        public String alwaysWrite = "alwaysWriteValue";
        public String somtimeIgnore = "somtimeIgnoreValue";
    }
    
    下面是一个方法,该方法分配一个将忽略
    somtimeIgnore
    属性的筛选器

    public void dontWriteSomtimes(So so) {
        ObjectMapper mapper = new ObjectMapper();
        FilterProvider filters = new SimpleFilterProvider()  
          .addFilter("filter properties by name", SimpleBeanPropertyFilter.serializeAllExcept("somtimeIgnore"));  
        ObjectWriter writer = mapper.writer(filters);  
        try {
            System.out.println(writer.writeValueAsString(so));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    输出:
    {“alwaysWrite”:“alwaysWriteValue”}

    下面是一个将写入所有内容的方法:只需分配一个不存在或为空的属性:

    public void writeEveryting(So so) {
        ObjectMapper mapper = new ObjectMapper();
        FilterProvider filters = new SimpleFilterProvider()  
          .addFilter("filter properties by name", SimpleBeanPropertyFilter.serializeAllExcept(""));  
        ObjectWriter writer = mapper.writer(filters);  
        try {
            System.out.println(writer.writeValueAsString(so));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    输出:

    {“alwaysWrite”:“alwaysWriteValue”、“somtimeIgnoreValue”:“somtimeIgnoreValue”}

    kumaresan感谢您的回复。不幸的是,将@JsonIgnoreProperties放在同一个类上并不是一个解决方案。正如我前面提到的,我希望在方法上考虑属性,而另一个方法忽略它。谢谢你的回答。你把第二个方法的值设为null,然后当你需要的时候,再设一次。请。是的,null很好用。我不知道这是否是最优雅的解决方案,但它可以解决火灾。谢谢