我有一个@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> {
}
答案 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> {
}