我有一个对象,我希望我的杰克逊能够序列化。例如:
public class RaceCar {
public String model;
public Int topSpeed;
}
我的困难在于我不希望所有RaceCar的字段都被序列化。我试图将我的对象转换为一个超类,它不能访问我想要隐藏的字段。例如:
public class Car {
public String model;
}
然而,尽管演员阵容,杰克逊仍然设法序列化我所有的RaceCar领域。输出将是:
{"model": "x103", "topSpeed": 200}
即使将RaceCar对象强制转换为Object,Jackson也会序列化我所有的RaceCar字段。我猜杰克逊使用某种重叠机制来绕过我的演员。反正有没有阻止杰克逊绕过我的演员?
编辑:我应该指定我不能使用@JsonIgnore,因为在某些情况下我想返回整个对象,而在其他情况下,我想返回具有较少字段的对象。
答案 0 :(得分:1)
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.databind.ObjectMapper;
public class Q38034525
{
public static void main(String[] args) throws Exception
{
final RaceCar rc = new RaceCar();
rc.model = "Corvette Stringray";
rc.topSpeed = 195;
final ObjectMapper om = new ObjectMapper();
System.out.println(om.writeValueAsString(rc));
final ObjectMapper om2 = om.copy().addMixIn(RaceCar.class, RestrictedRaceCar.class);
System.out.println(om2.writeValueAsString(rc));
}
public static abstract class RestrictedRaceCar
{
@JsonIgnore
public Integer topSpeed;
}
public static class RaceCar
{
public String model;
public Integer topSpeed;
}
}
{"model":"Corvette Stringray","topSpeed":195}
{"model":"Corvette Stringray"}
您必须
.copy()
或创建ObjectMapper
的新实例 是不可变的,只是在实例上执行.addMixIn()
不 修改它。