我认为杰克逊基于方法的序列化,有什么方法可以让它基于字段?
例如:
class Bean {
Integer i;
String s;
public Integer getI() { return this.i; }
public void setI(Integer i) { this.i = i; }
public bool isSetI() { return this.i != null; }
// same for s as well
}
Run Code Online (Sandbox Code Playgroud)
输出JSON具有"i"和"setI".无论如何我可以覆盖这个只获得"我"?如果有一种方法可以在不向类中添加任何注释(它们是自动生成的)的情况下也会很棒.
Joh*_*hnC 11
查看@JsonAutoDetect注释.例:
@JsonAutoDetect(fieldVisibility=Visibility.ANY, getterVisibility=Visibility.NONE, isGetterVisibility=Visibility.NONE, setterVisibility=Visibility.NONE)
public class Bean {
Integer i;
String s;
Integer getI() { return this.i; }
void setI(Integer i) { this.i = i; }
bool isSetI() return { this.i == null; }
// same for s as well
}
Run Code Online (Sandbox Code Playgroud)
杰克逊也可以使用领域,是的; 但默认情况下,只发现公共字段.但您可以使用@JsonProperty标记非公共字段.
需要注意的一点是,如果同时存在方法(setX,getX)和字段(x),则方法将具有优先权.这通常不是问题,但如果是,则需要通过向@JsonIgnore它们添加enxt来显式地禁用不使用的方法.
要在没有注释的情况下完成此操作,可以ObjectMapper按以下方式配置序列化/反序列化之前:
ObjectMapper om = new ObjectMapper();
om.setVisibilityChecker(om.getSerializationConfig().getDefaultVisibilityChecker().
withGetterVisibility(JsonAutoDetect.Visibility.NONE).
withSetterVisibility(JsonAutoDetect.Visibility.NONE));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9946 次 |
| 最近记录: |