Учитывая наличие веб-службы RESTful, разработанной с использованием среды Spring Boot, я хотел найти способ подавления birthDate
всех пользователей в ответе. Это то, что я реализовал после поиска решения:
@RestController
public class UserResource {
@Autowired
private UserDAOservice userDAOService;
@GetMapping("/users")
public MappingJacksonValue users() {
List<User> users = userDAOService.findAll();
SimpleBeanPropertyFilter filter = SimpleBeanPropertyFilter
.filterOutAllExcept("id", "name");
FilterProvider filters = new SimpleFilterProvider().addFilter(
"UserBirthDateFilter", filter);
MappingJacksonValue mapping = new MappingJacksonValue(users);
mapping.setFilters(filters);
return mapping;
}
}
Однако, когда я нажимаю на конечную точку покоя в браузере, я все еще вижу дату рождения пользователя в ответе:
{
"id": 1,
"name": "Adam",
"birthDate": "1980-03-31T16:56:28.926+0000"
}
Вопрос 1: Какой API я могу использовать для достижения своей цели?
Далее, при условии, что я хочу придерживаться HATEOAS в комбинации с фильтрацией, как я могу go об этом. Я не могу выяснить API, которые можно использовать для совместного использования этих двух функций:
@GetMapping("/users/{id}")
public EntityModel<User> users(@PathVariable Integer id) {
User user = userDAOService.findById(id);
if (user == null) {
throw new ResourceNotFoundException("id-" + id);
}
EntityModel<User> model = new EntityModel<>(user);
WebMvcLinkBuilder linkTo = linkTo(methodOn(this.getClass()).users());
model.add(linkTo.withRel("all-users"));
//how do I combine EntityModel with filtering?
return model;
}
Вопрос 2: Как мне объединить EntityModel
с MappingJacksonValue
?
Примечание: Мне известна аннотация @JsonIgnore
, но при этом будет применяться фильтр для всех конечных точек, использующих домен; однако я хочу ограничить фильтрацию только двумя указанными выше конечными точками.