Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 以编程方式忽略(省略)REST服务JSON响应中的特定字段,而不更改DTO对象类_Java_Json_Rest - Fatal编程技术网

Java 以编程方式忽略(省略)REST服务JSON响应中的特定字段,而不更改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(

我有一个DTO类和一些REST服务,它们有时会返回这些DTO的列表

我不能改变DTO,因为它在项目的几个地方都有使用

但是,仅针对一个特定的REST服务,我需要排除该DTO对象的一些字段

基本上我只需要在某一点上申请

我尝试将
@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)
这也是我选择的解决方案:),但我认为可以有一个不太详细的解决方案,使用自定义过滤器,就像我给出的代码示例一样。