quarks
quarks

Reputation: 35276

@JsonIgnore only for response but not for requests

Is there a way to make @JsonIgnore annotation that it will only ignore during API or HTTP response but not ignore when doing API request.

I also understand that Jackson is used with several frameworks like Restlet, Spring, etc. so what is the generic way of doing this with the ignore annotation. The annotation class does not seem to have any parameters to set this.

Consider the code below:

public class BoxModel extends Model {
    @JsonIgnore
    private String entityId;
    @JsonIgnore
    private String secret; 
}

In this example, the "secret" field should not be ignored during an API request but should not return back when doing a response, e.g. a JSON response. setting this field to null does not make the field go away, it just sets the value to null and so the field is still on the response payload.

Upvotes: 1

Views: 1735

Answers (2)

Yassin Hajaj
Yassin Hajaj

Reputation: 21975

You could potentially find a way to achieve this using Jackson JSON Views by hiding fields when serializing the object.

Example

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

Upvotes: 1

amseager
amseager

Reputation: 6391

Actually, the standard way is to have 2 separate classes for request and response, so you won't have any problem at all.

If you really need to use the same class for both cases, you can put @JsonInclude(Include.NON_NULL) onto the field instead of @JsonIgnore and set secret = null; before returning the response (as you said in question) - nullable field will be hidden after that. But it's some kind of a trick.

Upvotes: 3

Related Questions