Java 以编程方式忽略(省略)REST服务JSON响应中的特定字段,而不更改DTO对象类
我有一个DTO类和一些REST服务,它们有时会返回这些DTO的列表 我不能改变DTO,因为它在项目的几个地方都有使用 但是,仅针对一个特定的REST服务,我需要排除该DTO对象的一些字段 基本上我只需要在某一点上申请 我尝试将Java 以编程方式忽略(省略)REST服务JSON响应中的特定字段,而不更改DTO对象类,java,json,rest,Java,Json,Rest,我有一个DTO类和一些REST服务,它们有时会返回这些DTO的列表 我不能改变DTO,因为它在项目的几个地方都有使用 但是,仅针对一个特定的REST服务,我需要排除该DTO对象的一些字段 基本上我只需要在某一点上申请 我尝试将@JsonFilter(“restrictionFilter”)应用于我的DTO类,但如果每次我将对象整理成JSON时没有将该过滤器与映射器一起使用,就会出现错误,如下所示: final String writeValueAsString = mapper.writer(
@JsonFilter(“restrictionFilter”)
应用于我的DTO类,但如果每次我将对象整理成JSON时没有将该过滤器与映射器一起使用,就会出现错误,如下所示:
final String writeValueAsString = mapper.writer(
new SimpleFilterProvider()
.addFilter("restrictionFilter",
SimpleBeanPropertyFilter.filterOutAllExcept("name", "sizeInByte"))
).writeValueAsString(objectsList);
错误为无法解析id为“restrictionFilter”的PropertyFilter;没有配置FilterProvider…这个问题听起来像是一个完美的装饰设计模式。 使用获取原始DTO的构造函数创建一个新DTO,并创建所需的get方法或忽略所需的任何get方法。 例如:
public class NewDto {
OldDto oldDto;
public NewDto(OldDto oldDto){
this.oldDto = oldDto;
}
public String getName(){
return oldDto.getName();
}
}
现在您只需要返回NewDto对象,如下所示:
return new NewDto(oldDto)
这也是我选择的解决方案:),但我认为可以有一个不太详细的解决方案,使用自定义过滤器,就像我给出的代码示例一样。