如何将@Projection分配给@GetMapping spring servlet端点?

时间:2018-07-18 14:43:00

标签: java json spring spring-data spring-rest

我有一个@Entity Person类,并且想通过Web服务公开它。应该有一种只公开所有细节的方法,而端点只公开 view 摘录。

我可以为此使用Spring @Projection而不必手动提取要公开的字段吗?我宁愿只返回List<Person>,但只呈现某些端点的某些详细信息。

@RestController
public class BookingInfoServlet {
    @Autowired
    private PersonRepository dao;

    @GetMapping("/persons")
    public List<Person> persons() {
        return dao.findAll();
    }

    //TODO how can I assign the Projection here?
    @GetMapping("/personsView")
    public List<Person> persons() {
        return dao.findAll();
    }

    //only expose certain properties
    @Projection(types = Person.class)
    public interface PersonView {
        String getLastname();
    }
}

@Entity
public class Person {
    @id
    long id;

    String firstname, lastname, age, etc;
}

interface PersonRepository extends CrudRepository<Person, Long> {
}

1 个答案:

答案 0 :(得分:1)

请注意,@Projection仅适用于spring数据休息。我相信您可以尝试以下方法:

@Projection(name = "personView",  types = Person.class)
public interface PersonView {
    String getLastname();
}

在您的仓库中,您需要这样的东西:

@RepositoryRestResource(excerptProjection = PersonView.class)
interface PersonRepository extends CrudRepository<Person, Long> {
}