2

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

Luca Abbati
  • 542
  • 5
  • 14

0 Answers0