返回顶部
首页 > 资讯 > 后端开发 > Python >在SpringBoot中使用HATEOAS的方法
  • 731
分享到

在SpringBoot中使用HATEOAS的方法

2024-04-02 19:04:59 731人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

目录简介文章目标构建Entity和Repository构建HATEOAS相关的RepresentationModel构建ControllerHATEOAS的意义简介 HATEOAS是

简介

HATEOAS是实现REST规范的一种原则,通过遵循HATEOAS规范,可以解决我们实际代码实现的各种个问题。作为java最流行的框架spring
当然也会不缺席HATEOAS的集成。

本文将会通过一个具体的例子来讲解如何在SpringBoot中使用HATEOAS。

文章目标

HATEOAS规则中,返回的数据会带有链接。我们以熟悉的Book为例,来展示这次的HATEOAS,首先创建一个Book entity:

@Data
@Entity
public class Book {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String title;
}

我们希望能够通过下面的链接来获取到Book的详细数据:

GET /book/1

返回的数据如下:

{
    "content": {
        "id": 1,
        "title": "The Hobbit"
    },
    "_links": {
        "self": {
            "href": "Http://localhost:8080/book/1"
        }
    }
}

可以看到在返回的数据中除了content包含了book的信息之外,还有一个_links属性,表示和该Book相关的资源链接。

构建Entity和Repository

在做任何数据之前,我们都需要构建相应的数据,也就是entity和对应的数据操作,为了简便起见,我们使用H2的内存数据库

我们需要在application.properties中配置如下:

spring.jpa.hibernate.ddl-auto=validate
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.passWord=password
spring.jpa.database-platfORM=org.hibernate.dialect.H2Dialect

然后配置对应的repository :

public interface BookRepository extends CrudRepository<Book, Long> {
    long deleteByTitle(String title);

    @Modifying
    @Query("delete from Book b where b.title=:title")
    void deleteBooks(@Param("title") String title);
}

同时,需要在resources中放置创建table的schema.sql和插入数据的data.sql。这样在程序启动的时候就可以自动创建相应的数据。

构建HATEOAS相关的RepresentationModel

如果要让自己来实现,也可以实现添加链接的操作,但是这样就太复杂了,还好我们有Spring。

要在Spring中使用HATEOAS,需要进行如下配置:

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-hateoas</artifactId>
        </dependency>

如果我们想要对Book进行HATEOAS的构建,那么可以构建一个类,继承RepresentationModel即可:

public class BookModel extends RepresentationModel<BookModel> {
    private final Book content;
    @JSONCreator
    public BookModel(@jsonProperty("content") Book content) {
        this.content = content;
    }
    public Book getContent() {
        return content;
    }
}

上面的例子中,我们用RepresentationModel封装了一个Book对象,并将其设置为json的content属性。

构建Controller

有了RepresentationModel,我们就可以使用它来构建HATEOAS的响应了。

我们看下面的例子:

	@RequestMapping("/book/{id}")
	public HttpEntity<Book> getBook(@PathVariable("id") Long id) {
		Book book= bookRepository.findById(id).get();
		BookModel bookModel = new BookModel(book);
		bookModel.add(linkTo(methodOn(BookController.class).getBook(id)).withSelfRel());
		return new ResponseEntity(bookModel, httpstatus.OK);
	}

上面的例子中,我们使用@RequestMapping来构建了一个HTTP请求,通过传入book的id来从数据库中查找相应的Book数据。

然后将其传入BookModel中,构建好RepresentationModel。这时候可以直接返回这个对象。但是我们还需要向其添加一些links。

我们使用bookModel.add来添加相应的link。并且使用linkTo方法来生成相应的link。最后将RepresentationModel返回。当我们请求/book/1的时候,就会得到最前面我们想要得到的json值。使用HATEOAS是不是很简单?

HATEOAS的意义

HATEOAS带有相应的资源链接,通过一个资源就可以得到从这个资源可以访问的其他的资源,就像是一个访问到一个页面,可以再通过这个页面去访问其他的页面一样。所以HATEOAS的意义就在于我们只需要访问一个资源就可以遍历所有的资源。我们通过测试来体验一下资源的访问。

首先,我们直接访问/book/1这个资源,来确认下得到的结果:

    @Test
    void envEndpointNotHidden() throws Exception {
        mockmvc.perform(get("/book/1"))
                .andExpect(jsonPath("$.content.title").value("The Hobbit"));
    }

然后再通过Spring HATEOAS提供的Traverson类来进行链接的遍历:

	@Test
	void envEndpointNotHidden() throws Exception {
		Traverson traverson = new Traverson(new URI("http://localhost:" + this.port + "/book/1"), MediaTypes.HAL_JSON);
		String bookTitle = traverson.follow("self").toObject("$.content.title");
		assertThat(bookTitle).isEqualTo("The Hobbit");
	}

到此这篇关于在SpringBoot中使用HATEOAS的方法的文章就介绍到这了,更多相关SpringBoot使用HATEOAS内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 在SpringBoot中使用HATEOAS的方法

本文链接: https://lsjlt.com/news/149142.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 在SpringBoot中使用HATEOAS的方法
    目录简介文章目标构建Entity和Repository构建HATEOAS相关的RepresentationModel构建ControllerHATEOAS的意义简介 HATEOAS是...
    99+
    2024-04-02
  • SpringBoot中的HATEOAS详情
    目录简介链接LinksURI templatesLink relationsRepresentation models总结简介 SpringBoot提供了HATEOAS的便捷使用方式...
    99+
    2024-04-02
  • Thymeleaf方法如何在SpringBoot中使用
    Thymeleaf方法如何在SpringBoot中使用?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。ThymeleafThymeleaf是最近SpringBoot推荐支持的模板...
    99+
    2023-05-31
    springboot thymeleaf
  • idea 在springboot中使用lombok插件的方法
    在idea中添加lombok插件 选择 file-->setting--->plugins  搜索lombok  并安装插件后重启idea 使用Lo...
    99+
    2024-04-02
  • 在SpringBoot项目中的使用Swagger的方法示例
    目录一. 首先Swagger是什么?Swagger的主见介绍:二. Swagger UI的使用:三. Swagger整合SpringBoot1. Pom依赖:2. 配置类:3...
    99+
    2024-04-02
  • 如何在SpringBoot中使用main方法注入service
    如何在SpringBoot中使用main方法注入service?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。一、SpringBoot中的main方法注入service在spri...
    99+
    2023-06-15
  • SpringBoot中使用tkMapper的方法详解
    目录简介MyBatis 基础环境tkMapper 环境搭建tkMapper 对数据的通用操作数据准备tkMapper 常用方法之增删改tkMapper 常用方法之查询tkMapper...
    99+
    2022-11-13
    SpringBoot使用tkMapper SpringBoot tkMapper
  • 在springboot中使用定时任务的方式
    本篇内容介绍了“在springboot中使用定时任务的方式”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!springboot定时任务在spr...
    99+
    2023-06-20
  • springboot中encode方法怎么使用
    在Spring Boot中,可以使用PasswordEncoder接口的实现类来进行编码操作。一般来说,可以通过@Bean注解来将P...
    99+
    2024-03-07
    springboot
  • SpringBoot中使用Swagger的超简单方法
    Swagger号称世界上最流行的Api框架,它是RestFul 风格的Api。文档在线自动生成工具:Api文档与API定义同步更新。可以直接运行,能在线测试API接口;支持多种编程语...
    99+
    2024-04-02
  • springboot下使用mybatis的方法
    使用mybatis-spring-boot-starter即可。 简单来说就是mybatis看见spring boot这么火,于是搞出来mybatis-spring-boot-starter这个解决方案来与springboot更好的集成详见...
    99+
    2023-05-30
    spring boot mybatis
  • SpringBoot中使用监听器的方法详解
    目录1.监听器2.SpringBoot中监听器的使用2.1 监听Servlet上下文对象2.2 监听HTTP会话Session对象总结1.监听器 web监听器是一张Servlet中特...
    99+
    2024-04-02
  • SpringBoot中使用多线程的方法示例
    一、介绍 Spring是通过任务执行器(TaskExecutor)来实现多线程和并发编程,使用Spring提供的ThreadPoolTaskExecutor来创建一个基于线城池的T...
    99+
    2024-04-02
  • Springboot项目中使用redis的配置方法
    小编给大家分享一下Springboot项目中使用redis的配置方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!springboot是什么springboot一...
    99+
    2023-06-14
  • 在Django中使用MQTT的方法
    安装MQTT Python环境下安装MQTT也很简单,需要注意的就是不要输错命令 在Python3环境下安装Python MQTT的命令是: pip3 install pah...
    99+
    2024-04-02
  • 在jupyternotebook中使用pytorch的方法
    笔者刚开始学习pytorch时便遇到了无法在jupyter notebook使用anaconda配置的环境的问题,当时尝试了各种方法:卸载重装anaconda、pytorch环境、j...
    99+
    2024-04-02
  • iota在Go中的使用方法
    这篇文章将为大家详细讲解有关iota在Go中的使用方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。go是什么golang是一种编译语言,可以将代码编译为机器代码,编译后的二进制文件可以直接部署到目标机器...
    99+
    2023-06-14
  • LocalDateTime在java中的使用方法
    这篇文章将为大家详细讲解有关LocalDateTime在java中的使用方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。常用的java框架有哪些1.SpringMVC,Spring Web MVC是一种...
    99+
    2023-06-14
  • 浅谈在springboot中使用定时任务的方式
    springboot定时任务 在springboot环境下有多种方法,这里记录下使用过的其中两种;1、使用注解,2、通过实现接口的方式。 使用注解的方式虽然比较简单,但是如果项目需要...
    99+
    2024-04-02
  • 在SpringBoot中,如何使用Netty实现远程调用方法总结
    Netty Netty是一个NIO客户端服务器框架: 它可快速轻松地开发网络应用程序,例如协议服务器和客户端。 它极大地简化和简化了网络编程,例如TCP和UDP套接...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作