gpt4 book ai didi

java - Spring MVC 中的 Jackson Field 过滤器

转载 作者:行者123 更新时间:2023-12-01 06:04:22 26 4
gpt4 key购买 nike

我有一个 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);
}
}

客户端查询示例:

返回没有字段过滤器的所有人员

http://localhost:8080/person

[
{
"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 应用程序配置此用例吗?

最佳答案

我找到了临时的解决方案:

@ControllerAdvice
public class JsonFilterAdvice implements ResponseBodyAdvice<List<?>>
{

@Override
public List<?> beforeBodyWrite(
List<?> arg0,
MethodParameter arg1,
MediaType arg2,
Class<? extends HttpMessageConverter<?>> arg3,
ServerHttpRequest arg4,
ServerHttpResponse arg5)
{
HttpServletRequest servletRequest = ((ServletServerHttpRequest) arg4).getServletRequest();
String[] params = servletRequest.getParameterValues("filters");
if (params != null)
{
// parse object and set field to null
}
return arg0;
}

@Override
public boolean supports(MethodParameter arg0, Class<? extends HttpMessageConverter<?>> arg1)
{
// return true if method parameters contain 'filters' field
return true;
}

欢迎任何其他建议

关于java - Spring MVC 中的 Jackson Field 过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48104959/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com