Spring Data Rest学习篇----@Projection
Spring Data Rest---projection (投射,投影)
对应spring-data-rest-reference 的第8.1章
当一个实体类含有另一个实体类的对象时
@Entity
public class Person{@Id @GeneratedValueprivate Long id;private String firstName, lastName;@OneToOneprivate Address address;…
}
接口:
interface PersonRepository extends CrudRepository<Person, Long> {}
address相当于一个链接,连接到另外一个名为Adrress的表,
但是在使用到Person的对象时,不一定能识别到address属性,Rest中有两种方法让address能被识别:
第一种,和Person一样增加一个Address的Repository
interface AddressRepository extends CrudRepository<Address, Long> {}
这种情况下,Person会把address当作一个子链接,链接到当前Person对象的address属性对应的Address表中的对象。ex.
{"firstName" : "Frodo","lastName" : "Baggins","_links" : {"self" : {"href" : "http://localhost:8080/persons/1"},"address" : {"href" : "http://localhost:8080/persons/1/address"}
}
}
这里可以看到address属性内容是一个链接,此链接是person链接的子链接,在浏览器输入此链接访问时就可以直接访问到此person的address内容。
第二种,如果没有定义Address自己的Repository,那么Person会把address的内容嵌入到Person的address属性中,作为person对象的一个字段内容。
{"firstName" : "Frodo","lastName" : "Baggins","address" : {"street": "Bag End","state": "The Shire","country": "Middle Earth"},"_links" : {"self" : {"href" : "http://localhost:8080/persons/1"}
}
}
那么问题来了:
问题1--如果我在person中不想要address的具体内容呢?
也就是说在Person类中有address这个属性,但是并不想要它的内容,那就要用到Projection了,如
@Projection(name= "noAddresses",types= { Person.class }) ①
interface NoAddresses{ ②String getFirstName(); ③String getLastName(); ④
}
① 这里的name属性是Projection的名字,types表示这个Projection只提供给Person类型的对象,在访问的时候也只能通过Person对象访问到这个Projection。
NoAddresses接口中只只有FirstName和LastName的getter方法,说明它不会提供任何address的信息。假如现在你定义了一个Address的Repository,Rest提供的Person对象的内容会有所不同,如下:
{"firstName" : "Frodo","lastName" : "Baggins","_links" : {"self" : {"href" : "http://localhost:8080/persons/1{?projection}", ①"templated" : true},"address" : {"href" : "http://localhost:8080/persons/1/address"}
}
}
可以看到这里的链接发生了变化,这里多加的一个条件是{?projection},说明可以添加projection的方式去访问此对象,比如:
http://localhost:8080/persons/1?projection=noAddresses
这里的projection的值noAddresses要和@Projection(name = "noAddress")中的name值要相同。
问题2--那一个Person类可以有多个@Projection吗?
答案是:可以的!可以设置多个@Projection
问题3--Spring Data Rest怎么寻找@Projection注解?
答案是:和实体类在同一个包下或者子包下的 @Projection都会被扫描到,并注册到Bean中。另外,也可以人工注册@Projection,这样的方式是通过
RepositoryRestConfiguration.projectionConfiguration().addProjection(…).
实现的。
不管是哪种情况,必须要在接口中添加@Projection注解。
Spring Data Rest学习篇----@Projection相关推荐
- Spring Data MongoDB 学习和使用
1.准备环境 新建一个Springboot项目 点击finish完成项目的搭建 2.配置连接参数 # application.properties # 配置数据库连接 #格式: mongodb://账 ...
- [Spring Data MongoDB]学习笔记--建立数据库的连接
1. 有了上一篇的Mongo后,连接数据库我们还需要更多的信息,比如数据库名字,用户名和密码等. 我们可以继续来配置MongoDbFactory的实例. public interface MongoD ...
- 使用H2Database+Druid连接池+Spring Data JPA+Ehcache实现CRUD操作
前言 注:本篇为纯实践篇,主要用于技术整合,介绍如何搭建一个完整全面的Web项目.如果对于技术原理还不了解的童鞋可点击下方链接,学习后在来~ H2数据库教程:H2数据库入门 缓存使用教程:在Sprin ...
- 一步步学习 Spring Data 系列之JPA(一)
2019独角兽企业重金招聘Python工程师标准>>> 大概有半年多没有写博客了,主要是最近忙于工作,也没来得及与大家分享技术.当然现在的技术大多都有人写其博客分享了,也找不到合适写 ...
- 学习Spring Data JPA
简介 Spring Data 是spring的一个子项目,在官网上是这样解释的: Spring Data 是为数据访问提供一种熟悉且一致的基于Spring的编程模型,同时仍然保留底层数据存储的特殊 ...
- Spring Data JPA简单学习
从一个简单的 JPA 示例开始 本文主要讲述 Spring Data JPA,但是为了不至于给 JPA 和 Spring 的初学者造成较大的学习曲线,我们首先从 JPA 开始,简单介绍一个 JPA 示 ...
- Spring Data Commons 官方文档学习
Spring Data Commons 官方文档学习 -by LarryZeal Version 1.12.6.Release, 2017-07-27 为知笔记版本在这里,带格式. Table o ...
- 【SpringBoot框架篇】11.Spring Data Jpa实战
文章目录 1.简介 1.1.JPA 1.2.Spring Data Jpa 1.3.Hibernate 1.4.Jpa.Spring Data Jpa.Hibernate三者之间的关系 2.引入依赖 ...
- SpringBoot学习笔记:Spring Data Jpa的使用
更多请关注公众号 Spring Data Jpa 简介 JPA JPA(Java Persistence API)意即Java持久化API,是Sun官方在JDK5.0后提出的Java持久化规范(JSR ...
- Spring Web Service 学习之Hello World篇
http://fuxueliang.iteye.com/blog/175184 Spring Web Service是Spring社区基于Spring提供的一个关注于创建"文档驱动" ...
最新文章
- Putdb WebBuilder 6.5 正式版本发布
- Python 和 C/C++ 拓展程序的性能优化
- Go语言的分词器(sego)
- linux磁盘格式化
- android oreo_Android Oreo画中画
- 8.XSD 复合元素
- X波段卡塞格伦天线设计与仿真
- 2021年 阿里云商标注册申请的相关详情及分类介绍
- 教程篇(7.0) 10. FortiGate安全 反病毒 ❀ Fortinet 网络安全专家 NSE 4
- 钢琴家以前是学计算机的,奇特的钢琴家——裘元朴
- CSS(持续更新。。)
- 面试题:1、H5+css
- 2019长三角科技金融峰会召开 链塔CEO张翔分享区块链应用前景
- 推荐系统学习笔记——四、Netfilx经典推荐系统架构
- django 用户授权与许可
- STM8使用SPI通信需要注意的几个问题
- 永磁同步电机(PMSM)
- 心态-《自卑与超越》书中的精髓:我们为什么会感到自卑,以及如何做才能克服自卑情绪。
- Windows平台下Mediasoup客户端开发指南
- 「人形机器人」赛博梦碎,资本不为想象力买单