spring restful 接收json_30-Spring MVC与Restful服务

上篇我们学习了《29-Spring Boot Actuator指标监控》,结束了我们Spring Boot的深入学习,从本文开始基于Spring Boot系统学习Spring MVC。

f5438016ca34106e201ef7f659e4c8e6.png

1.Spring Web MVC简介

Spring Web MVC 我们通常简称为Spring MVC,它是一个基于MVC的web开发框架。从Spring 5.0开始,Spring引入了响应式的web框架Spring WebFlux,它们在使用的编程模型上保持高度的

Spring Web MVC是基于Servlet API构建,Spring Web MVC的Servlet实现为DispatcherServlet,它使用了一个Spring容器(WebApplicationContext),从而让Servlet和Spring容器结合在一起。

基于Spring Boot的Spring MVC应用内嵌了Servlet容器,我们可以直接运行Spring Boot开发的Web应用。在Web应用下Spring Boot为我们自动新建了一个类型为AnnotationConfigServletWebServerApplicationContext的Spring IoC容器。

2. 用Spring Boot学习Web MVC

我们新建应用作为本章的演示:

Group:top.wisely

Arifact:learning-spring-mvc

Dependencies:Spring Web Starter、Lombok

2.1 核心注解

Spring MVC的核心注解

  • @Controller:首先它组合了@Component注解,被注解的类是一个Bean;它是一个控制器。
  • @RequestMapping:将web请求路径映射到被注解的类或者方法上;
@Controller@RequestMapping("/demo")public class DemoController {    @RequestMapping("/hello")    @ResponseBody    public String hello(){       return "Hello World !!!";    }}

我们启动应用,用Postman访问http://localhost:8080/demo/hello。

65a62d0f4383987d74502712e84289c3.png

2.2 RESTful服务

REST是Representational State Transfer(表述性状态传递)的缩写,是目前基于Http的Web服务中最常用的一种架构。遵循REST架构规范的Web服务称之为RESTfu Web服务。它区别于以方法调用为导向的web服务(SOAP),强调基于网络资源的Web服务。本书将关注和提供RESTful服务,现代的应用的客户端可能是Android、IOS或者浏览器等,而基于浏览器的应用也会和服务端剥离,所以我们将不讨论MVC的Model和View部分。

当我们访问RESTful的网络资源时候,将得到如JSON、XML或HTMl格式的数据返回。一次完整的Web交互由两部分组成:

  • 请求:代表客户端向服务端发送的一次HTTP web请求。可由RequestEntity(HttpEntity的子类)来访问请求的所有内容
    • header为元数据信息,也可由@RequestHeader注解来获取;
      • 内容类型:请求头信息里有一项重要的属性叫内容类型(Content-Type),它指定body请求体的媒体类型(如:application/json),我们可使用@RestController的consumes属性来限制控制器方法支持的内容类型。
      • Accept:客户端可接受的返回媒体类型,如:Accept:application/json,text/html,客户端若不设置则默认为:Accept:*/*,我们可以使用@RestController的produces属性来限制控制器方法支持的返回媒体类型。在默认情况下,意味着客户端接受所有的返回媒体类型。
    • body为请求体数据,也可由由@RequestBody注解来获取;
    • 参数数据:URL路径上的数据:请求参数@RequestParam、路径变量@PathVariable等。
    • 请求方法:GET、POST、HEAD、OPTIONS、PUT、PATCH、DELETE和TRACE
  • 返回:response,由status、header和body组成,可由ResponseEntity(同样是HttpEntity的子类,封装了公共的header和body部分)来设置
    • header为元数据信息;
      • 内容类型:返回头中也有内容类型(Content-Type),它指定返回体body的媒体类型(如:application/json)
    • body为返回数据,也可由@ResponseBody来设置;
    • status状态信息,也可由@ResponseStatus来设置。状态主要有下面分类:
      • 1xx:信息反馈
      • 2xx:成功反馈
      • 3xx:重定向
      • 4xx:客户端导致的错误
      • 5xx:服务端导致的错误

Spring MVC给我们提供了@RestController用来开发RESTful Web服务,它组合了@Controller和@ResponseBody,意味着返回通过返回体来返回数据。

Spring MVC还针对不同的Http动作来定制语义化的@RequestMapping,我们先了解RESTful服务支持的HTTP请求方法:

  • GET:从返回体重获取资源。使用@GetMapping等同于@RequestMapping(method = RequestMethod.GET)
  • POST:通过请求体创建新的资源。使用@PostMapping等同于@RequestMapping(method = RequestMethod.POST)
  • PUT:通过请求体替换资源,若过不存在资源则创建。使用@PutMapping等同于@RequestMapping(method = RequestMethod.PUT)
  • PATCH:通过请求体更新资源,若不存在资源可以创建。使用@PatchMapping等同于@RequestMapping(method = RequestMethod.PATCH)
  • DELETE:删除资源。使用@DeleteMapping等同于@RequestMapping(method = RequestMethod.DELETE)
8d08babeb2f3f9853e1a055ed5927905.png
04e52e12ffb366f2890513672d80c488.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值