范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

Spring认证中国教育管理中心SpringDataREST框架教程五

  原标题:Spring认证中国教育管理中心-Spring Data REST框架教程五(Spring中国教育管理中心)8.3.构建更高效的前端
  ETag元素,结合If-Match和If-None-Match标题,让您构建一个对消费者的数据计划和移动电池寿命更友好的前端。这样做: 确定需要锁定的实体并添加版本属性。HTML5 很好地支持data-*属性,因此将版本存储在 DOM 中(例如data-etag属性)。 确定可从跟踪最新更新中受益的条目。获取这些资源时,将Last-Modified值存储在 DOM 中(data-last-modified可能)。 获取资源时,还要self在 DOM 节点中嵌入URI(可能data-uri或data-self),以便轻松返回资源。 调整PUT/ PATCH/DELETE操作中使用If-Match,也处理HTTP412 Precondition Failed状态代码。 调整GET操作以使用If-None-Match和If-Modified-Since处理 HTTP304 Not Modified状态代码。
  通过在您的 DOM 中嵌入ETag元素和Last-Modified值(或者对于本机移动应用程序可能在其他地方),您可以通过不一遍又一遍地检索相同的内容来减少数据和电池电量的消耗。您还可以避免与其他客户端发生冲突,而是在需要协调差异时收到警报。
  以这种方式,只需对前端进行一些调整和一些实体级别的编辑,后端就会提供对时间敏感的详细信息,您可以在构建客户友好型客户端时从中获利。 9. 验证
  Validator在 Spring Data REST 中注册实例有两种方法:通过 bean 名称连接它或手动注册验证器。对于大多数情况,简单的 bean 名称前缀样式就足够了。
  为了告诉 Spring Data REST 您希望将Validator特定事件分配给特定事件,请在 bean 名称前加上相关事件。例如,要Person在将新实例保存到存储库之前验证类的实例,您可以Validator在您ApplicationContext的 bean 名称中声明一个 a 的实例beforeCreatePersonValidator。由于beforeCreate前缀与已知的 Spring Data REST 事件匹配,因此该验证器连接到正确的事件。 9.1.手动分配验证器
  如果您不想使用 bean 名称前缀方法,则需要向 bean 注册一个验证器实例,该 bean 的工作是在正确的事件之后调用验证器。在您的配置实现RepositoryRestConfigurer,覆盖configureValidatingRepositoryEventListener方法并调用addValidator上ValidatingRepositoryEventListener,传递要触发这个验证程序和验证的一个实例。以下示例显示了如何执行此操作: @Override void configureValidatingRepositoryEventListener(ValidatingRepositoryEventListener v) {   v.addValidator("beforeSave", new BeforeSaveValidator()); }10. 活动
  REST 导出器在使用实体的整个过程中发出八种不同的事件: BeforeCreateEvent AfterCreateEvent BeforeSaveEvent AfterSaveEvent BeforeLinkSaveEvent AfterLinkSaveEvent BeforeDeleteEvent AfterDeleteEvent 10.1.写一个ApplicationListener
  您可以创建一个抽象类的子类,该类侦听这些类型的事件并根据事件类型调用适当的方法。为此,请覆盖相关事件的方法,如下所示: public class BeforeSaveEventListener extends AbstractRepositoryEventListener {    @Override   public void onBeforeSave(Object entity) {     ... logic to handle inspecting the entity before the Repository saves it   }    @Override   public void onAfterDelete(Object entity) {     ... send a message that this entity has been deleted   } }
  但是,这种方法需要注意的一点是,它不会根据实体的类型进行区分。你必须自己检查。10.2.编写带注释的处理程序
  另一种方法是使用带注释的处理程序,它根据域类型过滤事件。
  要声明处理程序,请创建一个 POJO 并@RepositoryEventHandler在其上放置注释。这告诉BeanPostProcessor该类需要检查处理程序方法。
  一旦BeanPostProcessor找到带有此注释的 bean,它就会遍历公开的方法并查找与相关事件对应的注释。例如,要处理BeforeSaveEvent不同类型域类型的带注释的 POJO 中的实例,您可以按如下方式定义您的类:@RepositoryEventHandler  public class PersonEventHandler {    @HandleBeforeSave   public void handlePersonSave(Person p) {     // … you can now deal with Person in a type-safe way   }    @HandleBeforeSave   public void handleProfileSave(Profile p) {     // … you can now deal with Profile in a type-safe way   } }
  可以通过使用 (例如) 来缩小此处理程序适用的类型@RepositoryEventHandler(Person.class)。
  您感兴趣的事件的域类型由注释方法的第一个参数的类型确定。
  要注册您的事件处理程序,请使用 Spring 的@Component构造型之一标记该类(以便它可以被@SpringBootApplication或选取@ComponentScan)或在您的ApplicationContext. 然后在BeanPostProcessor中创建的RepositoryRestMvcConfiguration检查 bean 的处理程序并将它们连接到正确的事件。以下示例显示了如何为类创建事件处理程序Person: @Configuration public class RepositoryConfiguration {    @Bean   PersonEventHandler personEventHandler() {     return new PersonEventHandler();   } }
  Spring Data REST 事件是定制的Spring 应用程序事件。默认情况下,Spring 事件是同步的,除非它们跨边界重新发布(例如发出 WebSocket 事件或跨入线程)。11. 整合
  本节详细介绍了与 Spring Data REST 组件集成的各种方法,无论是从使用 Spring Data REST 的 Spring 应用程序还是通过其他方式。 11.1.程序链接
  有时您需要在自己定制的 Spring MVC 控制器中添加指向导出资源的链接。共有三个基本级别的链接可用: 手动组装链接。 将 Spring HATEOAS LinkBuilder 与linkTo()、slash()等一起使用。使用 Spring Data REST 的 RepositoryEntityLinks .
  第一个建议很糟糕,应该不惜一切代价避免。它使您的代码脆弱且风险高。第二个在创建到其他手写 Spring MVC 控制器的链接时很方便。最后一个,我们将在本节的其余部分探讨,适用于查找 Spring Data REST 导出的资源链接。
  考虑以下使用 Spring 自动装配的类: public class MyWebApp {  	private RepositoryEntityLinks entityLinks;  	@Autowired 	public MyWebApp(RepositoryEntityLinks entityLinks) { 		this.entityLinks = entityLinks; 	} }
  对于前面示例中的类,您可以使用以下操作:
  所有基于搜索的链接都支持用于分页和排序的额外参数。详情请参阅RepositoryEntityLinks。还有linkFor(Class<?> type),但它会返回一个 Spring HATEOAS LinkBuilder,它会将您返回到较低级别的 API。先尝试使用其他的。12. 元数据
  本节详细介绍 Spring Data 基于 REST 的应用程序提供的各种形式的元数据。 12.1.应用程序级配置文件语义 (ALPS)
  ALPS是一种数据格式,用于定义应用程序级语义的简单描述,其复杂性类似于 HTML 微格式。一个 ALPS 文档可以作为一个配置文件来解释具有与应用程序无关的媒体类型(例如 HTML、HAL、Collection+JSON、Siren 等)的文档的应用程序语义。这增加了跨媒体类型的配置文件的可重用性。
  — M. Admundsen / L. Richardson / M. Fosterhttps://tools.ietf.org/html/draft-amundsen-richardson-foster-alps-00
  Spring Data REST 为每个导出的存储库提供一个 ALPS 文档。它包含有关 RESTful 转换和每个存储库的属性的信息。
  Spring Data REST 应用程序的根是一个配置文件链接。假设您有一个同时包含persons和 related的应用程序addresses,根文档将如下所示: {   "_links" : {     "persons" : {       "href" : "http://localhost:8080/persons"     },     "addresses" : {       "href" : "http://localhost:8080/addresses"     },     "profile" : {       "href" : "http://localhost:8080/profile"     }   } }
  RFC 6906 中定义的配置文件链接是包含应用程序级详细信息的地方。该 ALPS规范草案旨在定义特定配置文件格式,这是我们在本节后面探索。
  如果您导航到 的个人资料链接localhost:8080/profile,您会看到类似于以下内容的内容:{   "_links" : {     "self" : {       "href" : "http://localhost:8080/profile"     },     "persons" : {       "href" : "http://localhost:8080/profile/persons"     },     "addresses" : {       "href" : "http://localhost:8080/profile/addresses"     }   } }
  在根级别,profile是一个链接,不能提供多个应用程序配置文件。这就是为什么您必须导航以/profile找到每个资源元数据的链接。
  如果您导航/profile/persons并查看Person资源的配置文件数据,您会看到类似于以下示例的内容: {   "version" : "1.0",   "descriptors" : [ {     "id" : "person-representation",      "descriptors" : [ {       "name" : "firstName",       "type" : "SEMANTIC"     }, {       "name" : "lastName",       "type" : "SEMANTIC"     }, {       "name" : "id",       "type" : "SEMANTIC"     }, {       "name" : "address",       "type" : "SAFE",       "rt" : "http://localhost:8080/profile/addresses#address"     } ]   }, {     "id" : "create-persons",      "name" : "persons",      "type" : "UNSAFE",      "rt" : "#person-representation"    }, {     "id" : "get-persons",     "name" : "persons",     "type" : "SAFE",     "rt" : "#person-representation"   }, {     "id" : "delete-person",     "name" : "person",     "type" : "IDEMPOTENT",     "rt" : "#person-representation"   }, {     "id" : "patch-person",     "name" : "person",     "type" : "UNSAFE",     "rt" : "#person-representation"   }, {     "id" : "update-person",     "name" : "person",     "type" : "IDEMPOTENT",     "rt" : "#person-representation"   }, {     "id" : "get-person",     "name" : "person",     "type" : "SAFE",     "rt" : "#person-representation"   } ] }
  此 JSON 文档的媒体类型为application/alps+json. 这与之前的 JSON 文档不同,后者的媒体类型为application/hal+json. 这些格式是不同的,并由不同的规范管理。
  您还可以profile在_links检查集合资源时在集合中找到链接,如下例所示: {   "_links" : {     "self" : {       "href" : "http://localhost:8080/persons"      },     ... other links ...     "profile" : {       "href" : "http://localhost:8080/profile/persons"      }   },   ... }
  此 HAL 文档代表了Person集合。
  它有一个指向元数据相同 URI的配置文件链接。
  同样,默认情况下,该profile链接提供 ALPS。但是,如果您使用Acceptheader,它可以提供application/alps+json.

消失了100多天,新疆旅行再次出发,背后的快乐只有来了才知道不知道从哪一天开始,所有人出门后不用再相互提醒就能正确佩戴口罩不知道从哪一天开始,面对新冠疫情大家不会再手足无措不知道从哪一天开始,科学防疫的思想逐步深入每一座城市的心每一个家庭的刘诗诗的两套黑色造型,同样是优雅的裙装穿搭,但长裙更唯美穿衣风格往往都与场合有着直接关系,正确的穿衣风格才能让造型与场景更有氛围感,所以女明星的活动造型和平日穿搭区别很大。活动造型,主要偏向于唯美优雅的穿衣风格,私底下会根据喜好和自身特春日唯美句子,情感心语人生感悟精辟简短文案,心情治愈个性签名1余生漫漫,爱有归期。2动心的时候万物复苏,什么都奔向欢喜。3你笑的时候一晃便是经年。4最有温度的距离,就是我不言,你不语,心安,默契。5做好自己该做的,有爱或无爱,都安然对待。6德国实测11款无人机来自中国的大疆打败天下无敌手凭借Mini2等无人机,中国制造商大疆打败天下无敌手无人机具有广泛的用途无论是作为一个有趣的玩具,还是作为一个真正的专业工具。与此相应,价格也有很大的差异。最近,德国商品测试基金会漫游紫海感怀那份唯美的浪漫每年的夏季,我都会到薰衣草庄园和世博园漫游紫海。尽管已过了恋爱的阶段,但置身在这一望无际的紫海中女人特有的那种浪漫情愫油然而生!太喜欢这紫色的花海啦!它不仅是女孩子最钟情最梦幻的地净水器究竟该怎么选购?关于全屋净水系统装修攻略都整理在这里了现代居家生活,无论是购买的精装房,还是毛坯房,为了提升生活品质,涉水家电或者说环境电器都是必不可少的,比如全屋净水系统洗碗机厨余垃圾处理器,等等。图注全屋净水系统安装实景图展示如果新游戏新装备,满血满功耗华硕天选游戏本选购攻略导读阳春三月,近期各种游戏大作开始陆续上线,有不少玩家早已按耐不住想更换一款更趁手的游戏笔记本了。作为过来人,我今天就给大家分享几点选购游戏本的经验,以及分享一下我比较喜欢的游戏笔2022必去的五个海岛丨国内小众丨上岛攻略丨游玩路线国内这五个绝美海岛你都知道吗?话不多说,直接上盘点。如果外出旅游需要寄存行李,可以在途简单查看预订行李寄存点涠洲岛入选中国国家地理的最美海岛,被评为中国十大最美海岛的涠洲岛到底有何别瞎花钱!1招辨别敏感肌类型改善攻略不是敏感肌的朋友,永远都不会明白敏感肌的痛苦,敏感肌可以说是最让人头疼的肌肤问题之一了,那么今天我们就来探索一下,敏感肌怎么来的,为什么你就成了敏感肌,敏感肌还有恢复成健康肌肤的可怀柔红螺寺宜居的宝藏之地阳春三月,温度不冷不暖,山上还是依然萧条,但能看到即将新生的影子,这时候京郊的景色并不很美,红螺寺可以作为游玩的过渡之地,看过了各种秀水青山美景,偶尔游览一下人文景观也是很好的调剂想出国旅游?请查阅这份当下澳洲出国旅行须知你今年想去国外度假吗?还在担心旅行目的地政策上的问题?2022年的旅行可能有点令人头疼,要考虑的因素包括疫苗护照旅行保险和健康问题。当你试着去研究到底需要做什么的时候,真实的答案总
睡觉流口水是睡得香?不一定!可能暗示了这些病你睡觉流口水吗?有没有一觉醒来,竟然发现枕头湿漉漉的?这难道是梦见吃了什么好吃的或是睡得太沉太香了?还真不是,通常正常人很少流口水,如果成年人出现睡觉流口水,很有可能与以下几种原因转氨酶偏高不能吃南瓜吗?提醒若是想养肝,这3种蔬菜莫贪吃能够反映我们身体健康水平的数值有很多,其中包括血压血脂血糖,还有一项就是转氨酶水平。转氨酶水平偏高的人群去血站献血通常会被拒绝。一般来说,受到肝功能的作用,身体里的转氨酶指数就会有本人琢磨电视机好几年,奉上2021年电视机选购全攻略,帮你避雷这里是知科技,每日都会分享实用知识!一秒关注我吧!软件网站数码推荐数码评测实用科技知识,每日不停更新!随着近几年国内厂商的不断发力,不断地争夺市场,智能电视的种类越来越多,什么LE新生儿冬天洗澡的方法新生儿的皮肤特别娇嫩,因此更容易出现湿疹奶癣等问题,需要父母格外细心地照顾。洗澡频率新生儿的皮肤厚度只有成人皮肤厚度的一半,皮脂分泌旺盛,长时间不洗澡的话,油脂过度堆积在皮肤表面,行动起来,让烧烫伤远离孩子(健康直通车(第71站))来源人民网人民日报海外版中国社会福利基金会烧烫伤关爱公益基金建设的远离烫烫小怪兽安全体验空间以场景再现模拟互动,让孩子识别生活中潜在的危险源,培养孩子的安全预防行为习惯。图为小朋友待产包应该怎么准备,这份清单一次性写清楚,建议收藏生小孩时待产包里都要带什么东西呢其实之前小编就已经写过两次了,但是还有即将生育的妈妈来问,所以今天小编打算用表格的方式一次性列出来。小编这次整理的清单,分为两部分,一部分以宝宝为主全家放鞭炮庆祝,17岁少年才知道父母生了二胎我就像个傻瓜一样孩子是一个家庭的希望,从孩子呱呱落地开始,父母就用满腔的慈爱和耐心去陪伴呵护他,直到他慢慢长大。可是很多父母会发现,孩子越来越大,却没有了小时候的可爱和省心,他们有了自己的想法,不欧洲发达国家之奥地利的现状,带你看看真实的奥地利1。奥地利人特别喜欢吃中餐,据了解,早在1940年奥地利就有中餐馆了,当时是一个在奥地利留学的中国学生在首都维也纳开设的。据不完全统计,到目前为止在奥地利一共有近1200家中餐馆,中国游客在日本找厕所,看到新型公厕扭头就走,网友真刺激如今出国旅游的中国人越来越多了,在世界各国都能看到我们中国人的身影,而世界上每个国家都独具特色,我们在世界各地都能遇到一些很新鲜奇葩的事情。这些经历也丰富了我们的人生,增长了我们的越南美食全攻略从越南菜到越南小吃,全方位探索越南美食之前我们介绍过越南的小吃,今天我们来系统地聊聊越南的各种美食吧越南主要分为三个不同的部分北部中部和南部。每个地区的烹饪风格都有所不同,包括主要成分口感和风味等。但是也会有一些共同点身体不好,睡觉先知?若睡觉没出现4个现象,说明你身体还蛮不错事实上,人们普遍害怕死亡,也畏惧死亡,害怕自己年纪轻轻就这样结束生命。因此,很多的年轻人也早早地加入了养生保健的大军当中。由于很多人都有着工作和生活的双重压力,一边是重如千斤的生活