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很好用。我不知道这是否是最优雅的解决方案,但它可以解决火灾。谢谢