Spring RestController[通俗易懂]

Spring RestController[通俗易懂]SpringRestControllerannotationisaconvenienceannotationthatisitselfannotatedwith@Controllerand@ResponseBody.Thisannotationisappliedtoaclasstomarkitasarequesthandler.Spring…

大家好,又见面了,我是你们的朋友全栈君。

Spring RestController annotation is a convenience annotation that is itself annotated with @Controller and @ResponseBody. This annotation is applied to a class to mark it as a request handler.

Spring RestController注释是一个方便注释,它本身使用@Controller@ResponseBody注释。 该注释将应用于一个类,以将其标记为请求处理程序。

Spring RestController annotation is used to create RESTful web services using Spring MVC. Spring RestController takes care of mapping request data to the defined request handler method. Once response body is generated from the handler method, it converts it to JSON or XML response.

Spring RestController批注用于使用Spring MVC创建RESTful Web服务。 Spring RestController负责将请求数据映射到定义的请求处理程序方法。 从处理程序方法生成响应主体后,它将其转换为JSON或XML响应。

Spring RestController示例 (Spring RestController Example)

Let’s see how easily we can use RestController to create a REST web service in Spring. We will reuse the Spring Repository implementation and create a restful webservice.

让我们看看在Spring中使用RestController创建REST Web服务有多么容易。 我们将重用Spring Repository实现并创建一个宁静的Web服务。

We will create a standalone Web application and not use Spring Boot here. We will also expose our APIs to support both JSON and XML in request and response.

我们将在这里创建一个独立的Web应用程序,而不使用Spring Boot。 我们还将在请求和响应中公开支持JSON和XML的API。

Below image shows our final project structure.

下图显示了我们的最终项目结构。

Model and Repository classes are already provided in the Spring Repository tutorial. We will focus more on RestController implementation here.

Spring Repository教程中已经提供了Model和Repository类。 我们将在这里更多地关注RestController的实现。

Spring RestController Maven依赖关系 (Spring RestController Maven Dependencies)

Let’s have a look at the dependencies required to create our Spring RestController example project.

让我们看一下创建Spring RestController示例项目所需的依赖项。

<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-webmvc</artifactId>
	<version>5.0.7.RELEASE</version>
</dependency>
<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-web</artifactId>
	<version>5.0.7.RELEASE</version>
</dependency>

<!-- Jackson for REST JSON Support -->
<dependency>
	<groupId>com.fasterxml.jackson.core</groupId>
	<artifactId>jackson-databind</artifactId>
	<version>2.9.6</version>
</dependency>
<!-- JAXB for XML Response, needed to explicitly define from Java 9 onwards -->
<dependency>
	<groupId>javax.xml.bind</groupId>
	<artifactId>jaxb-api</artifactId>
	<version>2.3.0</version>
</dependency>
<dependency>
	<groupId>org.glassfish.jaxb</groupId>
	<artifactId>jaxb-runtime</artifactId>
	<version>2.3.0</version>
	<scope>runtime</scope>
</dependency>
<dependency>
	<groupId>javax.activation</groupId>
	<artifactId>javax.activation-api</artifactId>
	<version>1.2.0</version>
</dependency>

We need Spring MVC, Jackson and JAXB libraries to support both XML and JSON requests and responses from our REST web service.

我们需要Spring MVC,Jackson和JAXB库来支持XML和JSON请求以及来自REST Web服务的响应。

Our web.xml file is used to configure Spring MVC DispatcherServlet as the front controller.

我们的web.xml文件用于将Spring MVC DispatcherServlet配置为前端控制器。

Let’s look at the Spring Context file now.

现在让我们看一下Spring Context文件。

<?xml version="1.0" encoding="UTF-8"?>
<beans:beans
	xmlns="https://www.springframework.org/schema/mvc"
	xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
	xmlns:beans="https://www.springframework.org/schema/beans"
	xmlns:context="https://www.springframework.org/schema/context"
	xsi:schemaLocation="https://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd
		https://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd
		https://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">

	<!-- Enables the Spring MVC @Controller programming model -->
	<annotation-driven />

	<context:component-scan
		base-package="com.journaldev.spring" />

	<beans:bean id="jsonMessageConverter"
		class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter" />
	<beans:bean id="xmlMessageConverter"
		class="org.springframework.http.converter.xml.Jaxb2RootElementHttpMessageConverter" />

	<beans:bean
		class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
		<beans:property name="messageConverters">
			<beans:list>
				<beans:ref bean="jsonMessageConverter" />
				<beans:ref bean="xmlMessageConverter" />
			</beans:list>
		</beans:property>
	</beans:bean>

</beans:beans>

Most important part is the jsonMessageConverter and xmlMessageConverter beans defined and set in the RequestMappingHandlerAdapter messageConverters property. That’s all is needed to tell spring that we want our application to support both JSON and XML and these are the beans to be used for transformation.

最重要的部分是在RequestMappingHandlerAdapter messageConverters属性中定义和设置的jsonMessageConverterxmlMessageConverter Bean。 告诉Spring我们需要所有这些来支持我们的应用程序同时支持JSON和XML,并且这些都是用于转换的bean。

Spring RestController类 (Spring RestController Class)

Here is our Spring RestController class implementation.

这是我们的Spring RestController类的实现。

package com.journaldev.spring.controller;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

import com.journaldev.spring.model.Employee;
import com.journaldev.spring.repository.EmployeeRepository;

@RestController
public class EmployeeRestController {

	@Autowired
	private EmployeeRepository repository;
	
	@GetMapping("/rest/employee/get/{id}")
	public Employee getEmployeeByID(@PathVariable("id") int id) {
		return repository.retrieve(id);
	}
	
	@GetMapping("/rest/employee/getAll")
	//Returning is List is supported with JSON response only
	//If you want XML, then add a wrapper class as Root XML element, for example EmployeeList
	public List<Employee> getAllEmployees() {
		return repository.getAll();
	}

	@PostMapping("/rest/employee/create")
	public Employee createEmployee(@RequestBody Employee emp) {
		repository.store(emp);
		return emp;
	}
	
	@GetMapping("/rest/employee/search/{name}")
	public Employee getEmployeeByName(@PathVariable("name") String name) {
		return repository.search(name);
	}
	
	@DeleteMapping("/rest/employee/delete/{id}")
	public Employee deleteEmployeeByID(@PathVariable("id") int id) {
		return repository.delete(id);
	}
}

Notice that we have only defined our REST APIs here, all the business logic is part of Repository class.

注意,这里我们仅定义了REST API,所有业务逻辑都是Repository类的一部分。

If our method is returning a list or array, then spring will only support JSON response because XML root element can’t be anonymous but JSON can.

如果我们的方法返回列表或数组,那么spring将仅支持JSON响应,因为XML根元素不能匿名,而JSON可以。

If you want to support returning list as XML, then you will have to create a wrapper class to hold this list and return it.

如果要支持以XML返回列表,则必须创建一个包装器类来保存此列表并返回它。

We are expecting Employee object as the request in some of the methods, Spring will take care of parsing the request body and converting it to the Employee object for these methods.

我们期望在某些方法中将Employee对象作为请求,Spring将负责解析请求主体并将这些方法转换为Employee对象。

Similarly, we are returning Employee object as the Response Body, again Spring will take care of converting it to JSON/XML response.

同样,我们将Employee对象作为Response Body返回,Spring会再次将其转换为JSON / XML响应。

接受和内容类型请求标头 (Accept and Content-Type Request Headers)

We have configured our REST application to work with both XML and JSON. So how it will know that whether the request is XML or JSON. And if the response should be sent in JSON or XML format. This is where Accept and Content-Type Request Headers are used.

我们已经将REST应用程序配置为可以同时使用XML和JSON。 因此,它将如何知道请求是XML还是JSON。 以及是否应以JSON或XML格式发送响应。 这是使用“ Accept和“ Content-Type请求标头”的地方。

Content-Type: Defined the type of content in request body, if its value is “application/xml” then Spring will treat request body as XML document. If its value is “application/json” then the request body is treated as JSON.

Content-Type :定义了请求主体中内容的类型,如果其值为“ application / xml”,那么Spring将把请求主体视为XML文档。 如果其值为“ application / json”,则请求正文被视为JSON。

Accept: Defined the type of content client is expecting as response. If its value is “application/xml” then XML response will be sent. If its value is “application/json” then JSON response will be sent.

接受 :定义客户端期望作为响应的内容类型。 如果其值为“ application / xml”,则将发送XML响应。 如果其值为“ application / json”,则将发送JSON响应。

Spring RestController测试 (Spring RestController Test)

Our application is ready to be tested, I have deployed it on Tomcat-9 and testing with Postman. Below are the testing results with the explanation.

我们的应用程序已准备好进行测试,我已经将其部署在Tomcat-9上并通过Postman进行了测试。 以下是测试结果及其说明。

Spring RestController GET JSON响应 (Spring RestController GET JSON Response)

It’s a simple GET request, the important point to note is the value of “Accept” header.

这是一个简单的GET请求,需要注意的重要一点是“ Accept”标头的值。

Spring RestController GET XML响应 (Spring RestController GET XML Response)

Spring REST XML Response Accept header

When we changed “Accept” header value to “application/xml”, we are getting XML response.

当我们将“ Accept”标头值更改为“ application / xml”时,我们得到了XML响应。

Spring RestController GET列表 (Spring RestController GET List)

Let’s try to call the API to get list of employees.

Spring REST GET List JSON

We are getting list of elements in JSON with anonymous root element.

让我们尝试调用API以获取员工列表。

我们正在获取带有匿名根元素的JSON中的元素列表。

Spring REST GET List XML

Since XML doesn’t support anonymous root element, we are getting exception message.

由于XML不支持匿名根元素,因此我们收到了异常消息。

Spring RestController POST (Spring RestController POST)

Spring RestController POST with JSON Request and Response

Spring RestController POST带有JSON请求和响应

Spring RestController POST with JSON Request Body

Spring RestController POST与JSON请求正文

Spring RestController POST with JSON Request and XML Response

Spring RestController POST JSON Request and XML Response

Spring RestController POST带有JSON请求和XML响应

Spring RestController删除 (Spring RestController DELETE)

摘要 (Summary)

Spring RestController helps us in focusing on business logic by taking care of all the boiler-plate stuffs for creating REST web services APIs.

Spring RestController通过处理创建REST Web服务API的所有样板内容,帮助我们专注于业务逻辑。

GitHub Repository.
GitHub Repository下载完整的项目。

翻译自: https://www.journaldev.com/21536/spring-restcontroller

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/148565.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • ws激活码【中文破解版】2022.01.30

    (ws激活码)JetBrains旗下有多款编译器工具(如:IntelliJ、WebStorm、PyCharm等)在各编程领域几乎都占据了垄断地位。建立在开源IntelliJ平台之上,过去15年以来,JetBrains一直在不断发展和完善这个平台。这个平台可以针对您的开发工作流进行微调并且能够提供…

  • 常见分布式id生成方案_分布式id生成方案

    常见分布式id生成方案_分布式id生成方案文章目录一、为什么要用分布式ID1、什么是分布式ID2、那么分布式ID需要满足哪些条件二、分布式ID有哪些生成方式1、基于UUID2、基于数据库自增ID3、基于数据库集群模式4、基于数据库的号段模式5、基于Redis模式6、基于雪花算法(Snowflake)模式7、百度(uid-generator)8、美团(Leaf)号段模式snowflake模式9、滴滴(Tinyid)Http方式接入Java客户端方式接入三、总结一、为什么要用分布式ID在说分布式ID的具体实现之前,我们来简单分析一下为什么用分布式

    2022年10月25日
  • 百度地图开放平台开发者注册_全国矢量地图shp格式百度云

    百度地图开放平台开发者注册_全国矢量地图shp格式百度云SHA1分为发布版和开发版,便于开发者开发调试和最终上线使用。1通过Eclipse获取使用adt22以上版本,可以在Eclipse中直接查看,具体位置如下:Windows:依次在Eclipse中打开Window->Preferances->Android->Build;Mac:依次在Eclipse中打开Eclipse/ADT->Preferances->Android->Build。在弹出的对话框中SHA1f

  • 与ClientWidth有关的一点资料「建议收藏」

    与ClientWidth有关的一点资料「建议收藏」51windows.Netvar s=””;s+=”网页可见区域宽:”+document.body.clientWidth;s+=”网页可见区域高:”+document.body.clientHeight;s+=”网页可见区域宽:”+document.body.offsetWidth +”(包括边线的宽)”;s+=”网页可见区域高:

  • 富集分析集锦(KEGG富集分析图)

    链接:https://www.jianshu.com/p/988d90484f77不管是转录组,还是芯片数据,或者其他有关基因的组学分析,每当数据分析到后面,要想得到结果,都躲不过这个富集分析,因为它是帮助我们从庞杂的组学数据中发掘规律重要的一环,对基因功能进行富集分析,就有可能发现在生物学过程中起关键作用的生物通路,并且帮助理解生物学过程的分子机制。现在的高通量测序带来的巨大数据量,让我们眼…

  • 数据挖掘技术在零售超市CRM中的应用实例[通俗易懂]

    数据挖掘技术在零售超市CRM中的应用实例[通俗易懂]                                                  数据挖掘技术在零售超市CRM中的应用实例随着信息化的推进,零售企业积累的销售数据急速膨胀,包括顾客购买历史记录,货物进出,消费与服务记录等,为企业管理客户关系提供了大量的数据资料。利用数据挖掘技术对这些数据进行分析,进而识别顾客的购买行为,发现顾客购买模式和趋势,改进服务质量,取得更好顾客

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号