【发布时间】:2018-06-14 18:08:19
【问题描述】:
我有一个 Spring Boot 应用程序,我需要从 RequestParam 中过滤响应正文
例子:
// DTO
public class PersonDTO
{
private Long id;
private String firstName;
private String lastName;
}
// Controller
public class PersonController
{
@GetMapping(value = "/person")
public ResponseEntity<List<PersonDTO>> getPerson(@RequestParam(required = false) String filters)
{
List<PersonDTO> personList = myservoce.getPerson();
return new ResponseEntity<List<PersonDTO>>(personList, HttpStatus.OK);
}
}
客户端查询示例:
返回所有没有字段过滤器的人
[
{
"id": 123,
"firstName": "toto1",
"lastName": "titi2"
},
{
"id": 345,
"firstName": "toto2",
"lastName": "titi2"
}
]
返回所有人,响应只包含名字和姓氏: http://localhost:8080/person?filters=firstName,lastName
[
{
"firstName": "toto1",
"lastName": "titi2"
},
{
"firstName": "toto2",
"lastName": "titi2"
}
]
我找到了这个 API “jackson-dynamic-filter”,但是过滤器被用作这样的注释:
public class PersonController
{
@FilterOutAllExcept({"firstName", "lastName"})
@GetMapping(value = "/person")
public ResponseEntity<List<PersonDTO>> getPerson( @RequestParam(required = false) String filters )
{
List<PersonDTO> personList = myservoce.getPerson();
return new ResponseEntity<List<PersonDTO>>(personList, HttpStatus.OK);
}
}
在我的情况下,我无法使用此 API,因为字段过滤器列表由客户端管理,并且每次调用都可能不同,而我的真实有效负载 D 包含很多字段
我也找到了这个 API “jackson-antpathfilter”,但它对我不起作用,而且响应类型是 MappingJacksonValue 而不是 ResponseEntity>
知道如何使用 spring 应用程序配置这个用例吗?
【问题讨论】:
-
这里有同样的问题。我不敢相信没有一种干净简单的方法可以做到这一点。您是否找到了解决此问题的另一种方法而不是您写的答案?我尝试更改 spring 配置以检索 ObjectMapper 并在使用 ResponseEntity 调用 return 之前对其进行配置,但后来我遇到了其他类型的奇怪问题,我不知道如何解决,这让我觉得这不是正确的方法解决问题。
-
我在下面添加了一个临时解决方案
标签: java json spring spring-mvc jackson