春天顶部

通过参考,使用Spring 5和Spring Boot 2开始学习春天课程:

>>学习春天
休息顶部

通过参考,使用Spring 5和Spring Boot 2开始学习春天课程:

>>查看课程

1.概述

在本教程中,我们将查看定义自定义介质类型并通过Spring Rest Controller制作它们。

使用自定义媒体类型的良好用例是版本控制API。

2. API - 版本1

让我们从一个简单的示例开始 - 通过ID公开单个资源的API。

我们将从我们暴露于客户端的资源版本的版本开始。为此,我们将使用自定义HTTP标头 -“application / vn金宝搏188体育d.baeldung.api.v1 + json”

客户端将通过该客户询问此自定义媒体类型接受标题。

这是我们的简单端点:

@requestmapping(方法= RequestMethod.get,value =“/ public / api /项目/ {id}”,producate =“application / vnd.baeld金宝搏188体育ung.api.v1 + json”)@ResponseBy Public BaeldungItem GetItem(@PathVariable(“ID“)字符串ID){返回新baeldungItem(”it金宝搏188体育emid1“);}

通知生产参数在此 - 指定此API能够处理的自定义介质类型。

现在金宝搏188体育BaeldungItem资源 - 有一个字段 -itemid.

公共类BaeldungIt金宝搏188体育em {私有字符串itemid;//标准getters和setter}

最后但并非最不重要让我们为端点写入集成测试:

@test public vivenservice endpoint_whengetrequestfirstion _hhen200(){给定().accept(“application / vnd.baeldung.api.v金宝搏188体育1 + json”).wher().get(url_prefix +“/ public / public / api /项目/ 1”).then().contenttype(contentType.json).and()。statuscode(200);}

3. API - 版本2

现在让我们假设我们需要更改我们使用我们的资源暴露给客户端的详细信息。

我们曾经曝光过RAW ID - 让我们说现在我们需要隐藏它并揭露一个名称,以获得更多的灵活性。

重要的是要理解这种变化不是向后兼容的;基本上 - 这是一个破坏的变化。

这是我们的新资源定义:

公共类baeldungit金宝搏188体育emv2 {私有字符串itemname;//标准getters和setter}

因此,我们需要在这里做的是 - 将我们的API迁移到第二个版本。

我们将要这样做创建我们自定义媒体类型的下一个版本并定义新的终点:

@requestmapping(方法= requestmethod.get,value =“/ public / api / items / {id}”,producate =“application / vnd.金宝搏188体育baeldungung.api.v2 + json”)@ResponseByity Public BaeldungItemv2 GetItemSecondapaivenersion(@PathVariable(“ID“)字符串ID){return new baeldun金宝搏188体育gitemv2(”itemname“);}

所以我们现在拥有完全相同的端点,但能够处理新的V2操作。

当客户要求的时候“application / vn金宝搏188体育d.baeldung.api.v1 + json”- Spring将委派给旧操作,客户将收到一个金宝搏188体育BaeldungItem与A.itemid.场(V1)。

但是当客户现在设置接受标题为“application / vn金宝搏188体育d.baeldung.api.v2 + json” -他们将正确地击中新的操作并返回资源项目名称字段(v2):

@test public vivenservice endpoint_whengetrequestsecondapiversion_then200(){给定().accept(“application / vnd.baeldung金宝搏188体育.api.v2 + json”).wher().get(url_prefix +“/ public / public / api /项目/ 2”).then().contenttype(contentType.json).and()。statuscode(200);}

注意测试是如何相似但使用不同的接受标题。

4.自定义媒体类型在类级别

最后,让我们谈谈媒体类型的全类定义 - 金宝搏官网188be也可能:

@RestController @RequestMapping(value =“/”,producate =“application / vnd.b金宝搏188体育aeldung.api.v1 + json”)公共类自定义mediageatyiaty3oontroller

正如预期的那样,@requestmappping.注释轻松在课堂上工作,并允许我们指定价值生产消耗参数。

结论

本章在定义自定义媒体类型时,示例在版本传输公共API中是有用的。

可以找到所有这些示例和代码片段的实现GitHub项目

弹簧底部

使用Spring 5和Spring Boot 2开始,通过学习春天课程:

>>课程
休息底部

使用Spring 5和Spring Boot 2开始,通过学习春天课程 :

>>查看课程
评论在本文上关闭!