@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);
}