Assume I have a very simple model:
@Entity
public class Person {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
private String name;
private String email;
// ...getters and setters...
}
and its repository
@RepositoryRestResource(path = "persons")
public interface PersonRepository extends PagingAndSortingRepository<Person, Long>{
}
I need to make some custom filtering/massaging of the returned resources, so I need a @RepositoryRestController
that may look like this:
@RepositoryRestController
@ExposesResourceFor(Person.class)
@SuppressWarnings("rawtypes")
public class PersonsController {
private PersonRepository personRepository;
private PagedResourcesAssembler pagedResourcesAssembler;
@Autowired
public PersonsController(PersonRepository personRepository, PagedResourcesAssembler pagedResourcesAssembler) {
super();
this.personRepository = personRepository;
this.pagedResourcesAssembler = pagedResourcesAssembler;
}
@RequestMapping(method = RequestMethod.GET, value = "/persons/{id}/neighbors")
@ResponseBody
public Resources<?> getNeighbors(@PathVariable(value = "id") long id, Pageable pageable, PersistentEntityResourceAssembler resourceAssembler) {
Page<Person> persons = personRepository.findAll(pageable);
// ...do things here to filter, log, check permissions etc...
return pagedResourcesAssembler.toResource(persons, resourceAssembler);
}
}
Question: How can I set the Projection
that has to be used to export the Person
resource? I need to hide (only in this case) specific fields. Is there a way or I have to fallback to a Jackson custom serializer for this very specific purpose?
Thanks, Luca