@JsonIgnore 仅用于响应而不用于请求
@JsonIgnore only for response but not for requests
有没有办法制作 @JsonIgnore
注释,它只会在 API 或 HTTP 响应期间忽略,但在执行 API 请求时不会忽略。
我也知道 Jackson 与 Restlet、Spring 等多个框架一起使用,那么使用忽略注释的通用方法是什么。注释 class 似乎没有任何参数来设置它。
考虑以下代码:
public class BoxModel extends Model {
@JsonIgnore
private String entityId;
@JsonIgnore
private String secret;
}
在此示例中,在 API 请求期间不应忽略“秘密”字段,但在进行响应时不应 return 返回,例如JSON 响应。将此字段设置为 null 不会使该字段消失,它只是将值设置为 null,因此该字段仍在响应负载中。
实际上,标准方法是有 2 个单独的 classes 用于请求和响应,所以您根本不会有任何问题。
如果你真的需要对这两种情况使用相同的 class,你可以将 @JsonInclude(Include.NON_NULL)
放在字段上而不是 @JsonIgnore
并在返回之前设置 secret = null;
响应(正如你所说的那样) - 之后可以隐藏可为空的字段。但这是某种技巧。
您可以通过在序列化对象时隐藏字段来找到使用 Jackson JSON Views 实现此目的的方法。
例子
public class Item {
@JsonView(Views.Public.class)
public int id;
@JsonView(Views.Public.class)
public String itemName;
@JsonView(Views.Internal.class)
public String ownerName;
}
@JsonView(Views.Public.class)
@RequestMapping("/items/{id}")
public Item getItemPublic(@PathVariable int id) {
return ItemManager.getById(id);
}
有没有办法制作 @JsonIgnore
注释,它只会在 API 或 HTTP 响应期间忽略,但在执行 API 请求时不会忽略。
我也知道 Jackson 与 Restlet、Spring 等多个框架一起使用,那么使用忽略注释的通用方法是什么。注释 class 似乎没有任何参数来设置它。
考虑以下代码:
public class BoxModel extends Model {
@JsonIgnore
private String entityId;
@JsonIgnore
private String secret;
}
在此示例中,在 API 请求期间不应忽略“秘密”字段,但在进行响应时不应 return 返回,例如JSON 响应。将此字段设置为 null 不会使该字段消失,它只是将值设置为 null,因此该字段仍在响应负载中。
实际上,标准方法是有 2 个单独的 classes 用于请求和响应,所以您根本不会有任何问题。
如果你真的需要对这两种情况使用相同的 class,你可以将 @JsonInclude(Include.NON_NULL)
放在字段上而不是 @JsonIgnore
并在返回之前设置 secret = null;
响应(正如你所说的那样) - 之后可以隐藏可为空的字段。但这是某种技巧。
您可以通过在序列化对象时隐藏字段来找到使用 Jackson JSON Views 实现此目的的方法。
例子
public class Item {
@JsonView(Views.Public.class)
public int id;
@JsonView(Views.Public.class)
public String itemName;
@JsonView(Views.Internal.class)
public String ownerName;
}
@JsonView(Views.Public.class)
@RequestMapping("/items/{id}")
public Item getItemPublic(@PathVariable int id) {
return ItemManager.getById(id);
}