简体   繁体   中英

Programmatically ignore (omit) specific fields in JSON response of REST service WITHOUT altering the DTO object class

I have a DTO class and some REST services that sometimes return (among other things) a List of those DTOs.

I cannot alter that DTO, as it's used in several places of the project.

However, only for one specific REST service , I need to exclude some of the fields of that DTO object.

Basically I need to be able to apply this solution only at a certain point.

I tried applying @JsonFilter("restrictionFilter") to my DTO class, but then I get an error if I don't use that filter with a mapper every time I marshall the object into a JSON, like this:

final String writeValueAsString = mapper.writer(
  new SimpleFilterProvider()
    .addFilter("restrictionFilter", 
                SimpleBeanPropertyFilter.filterOutAllExcept("name", "sizeInByte"))
  ).writeValueAsString(objectsList);

The error is Cannot resolve PropertyFilter with id 'restrictionFilter'; no FilterProvider configured...

This issue sounds like a perfect Decorator design pattern use. Create a new DTO with a constructor that gets the original DTO and create which get methods you want or ignore whatever get methods you like. For example:

public class NewDto {

    OldDto oldDto;

    public NewDto(OldDto oldDto){
        this.oldDto = oldDto;
    }

    public String getName(){
        return oldDto.getName();
    }
}

Now you will only need to return the NewDto object, like so:

return new NewDto(oldDto)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM