springMVC 接收 json_springMVC 接收 json


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。


springMVC 接收 json_Web_02


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)