Spring学习笔记

启动超媒体(Enabling hypermedia)

作为应用程序状态引擎的超媒体( HATEOAS)是一种创建自描述API的方法,其中从API返回的资源包含指向相关资源的链接。这使客户能够在很少理解API的URL的情况下导航API。

Spring HATEOAS项目为Spring提供了超链接支持。它提供了一组类和资源组装器,可以在从Spring MVC控制器返回资源之前添加链接到资源。

启用超媒体,您需要将Spring HATEOAS启动器依赖项添加到构建中:

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

这个启动器不仅将Spring HATEOAS添加到项目的类路径中,还提供了自动配置以启用Spring HATEOAS。您需要做的就是重新设计控制器以返回资源类型而不是领域类型。

 @GetMapping("/recent")
    public Resources<TacoResource> recentTacos() {
        PageRequest page = PageRequest.of(0, 12, Sort.by("createAt").descending());
        Iterable<Taco> items = tacoRepo.findAll();
        List<Taco> tacos = new ArrayList<>();
        for (Taco taco : items) {
            tacos.add(taco);
        }

        //利用领域对象列表创建资源列表
        List<TacoResource> tacoResources=new TacoResourceAssembler().toResources(tacos);
        Resources<TacoResource> recentResources=new Resources<TacoResource>(tacoResources);
        //包装领域对象
//        Resources<Resource<Taco>> recentResources = Resources.wrap(tacos);

        //将链接添加到资源中
        recentResources.add(ControllerLinkBuilder.linkTo(methodOn(DesignTacoController.class).recentTacos()).withRel("recents"));
        return recentResources;
    }
package tacos.web.api;

import org.springframework.hateoas.mvc.ResourceAssemblerSupport;
import tacos.Taco;

//将领域类转换成资源类
public class TacoResourceAssembler extends ResourceAssemblerSupport<Taco,TacoResource> {

    public TacoResourceAssembler(){
        //DesignTacoController用于确定创建时创建的链接中任何URL的基本路径
        super(DesignTacoController.class,TacoResource.class);
    }

    //仅实例化一个Resource对象
    @Override
    protected TacoResource instantiateResource(Taco taco){
        return new TacoResource(taco);
    }

    //不仅要创造的Resource对象,还有链接来填充它
    @Override
    public TacoResource toResource(Taco taco) {
        return createResourceWithId(taco.getId(),taco);
    }
}
package tacos.web.api;

import lombok.Getter;
import org.springframework.hateoas.ResourceSupport;
import org.springframework.hateoas.core.Relation;
import tacos.Ingredient;
import tacos.Taco;

import java.util.Date;
import java.util.List;

//领域类Taco所对应的资源类型 TacoResource
//两个类的属性相同,但资源类型中不需要ID属性
@Relation(value = "taco",collectionRelation = "tacos")//设置资源类型生成Json的对象名称
public class TacoResource extends ResourceSupport {
    private static final IngredientResourceAssembler ingredientAssembler=new IngredientResourceAssembler();

    @Getter
    private final String name;

    @Getter
    private final Date createAt;

    @Getter
    private final List<IngredientResource> ingredients;

    public TacoResource(Taco taco){
        this.name=taco.getName();
        this.createAt=taco.getCreatedAt();
        this.ingredients=ingredientAssembler.toResources(taco.getIngredients());
    }

}

启用数据仓库支持的服务 Spring Data REST

它自动为Spring Data创建的存储库创建REST API

要开始使用Spring Data REST,请将以下依赖项添加到构建中:

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

为API设置一个基本路径,以使其端点不同,并且不会与您编写的任何控制器发生冲突

spring.data.rest.base-path=/api

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值