Spring spring

Spring中文网站 > Spring Batch > Spring MVC是如何和前端交互的 Spring MVC前后端分离怎么实现
Spring MVC是如何和前端交互的 Spring MVC前后端分离怎么实现
发布时间:2026/08/20 11:48:45

品牌型号:联想ThinkPad X1

系统:Windows10家庭版

软件版本:Spring 5.3.7

从事Java后端开发这些年,经常被问到的一个问题就是前后端如何完成交互,相信有很多刚入门的朋友面对Controller各类注解常会感到困惑,不明白数据如何从浏览器传递至方法参数,以及返回数据如何转为JSON传回前端。其实Spring MVC处理前后端交互的关键在于请求映射、参数绑定和数据序列化这几个环节。至于项目中常说的前后端分离,说白了就是把视图渲染这一步彻底交给前端,后端只负责把数据整理好递出去。下面就给大家介绍一下Spring MVC是如何和前端交互的,Spring MVC前后端分离怎么实现的相关内容。

一、Spring MVC是如何和前端交互的

我们先来说说这套交互到底是怎么跑起来的,我们在浏览器里发送个请求,这个请求会先到DispatcherServlet,它是整个MVC的入口,所有请求都得先经过它。DispatcherServlet在拿到我们从前端浏览器发送的请求之后不会自己去处理业务,而是去查HandlerMapping,根据请求路径和方法找到对应的Controller方法,这就是我们开发中常说的请求映射,靠的就是@RequestMapping或者@GetMapping这类注解标注出来的路径规则。

请求映射
图1:请求映射

找到目标方法以后,接下来就要想办法怎么把参数传进去,前端传参的方式无非是URL拼参数、表单提交或者请求体里放一段JSON,Spring MVC对这几种情况都做了封装,用@RequestParam接收查询参数,用@PathVariable接收路径变量,遇到JSON格式的请求体,就用@RequestBody配合消息转换器把JSON自动转成Java对象。

用@RequestParam接收查询参数
图2:用@RequestParam接收查询参数

方法执行完产生了结果就要考虑返回值该怎么处理了,现在多数项目走的是前后端分离的路子,方法上会加一个@ResponseBody,或者整个类直接用@RestController,这样返回值就不会被当成视图名去找页面,而是经过HttpMessageConverter直接序列化成JSON字符串写回响应体。

使用@ResponseBody注解
图3:使用@ResponseBody注解

二、Spring MVC前后端分离怎么实现

前后端分离主要在于让Controller只出数据不出页面,要做到这一点比较直接的办法就是给类加上@RestController,这个注解其实是@Controller和@ResponseBody的组合,方法返回什么对象,Spring就会通过消息转换器把它转成JSON写进响应体。

@RestController注解
图4:@RestController注解

仅让接口返回JSON并不充分,前后端分离架构下,前后端通常部署在不同域名、端口。这就需要处理跨域的问题,浏览器出于安全考虑会拦截跨域请求,Spring MVC这边可以用@CrossOrigin注解加在Controller或者方法上,指定允许访问的源。如果接口比较多,一个个加注解太麻烦,更常见的做法是实现WebMvcConfigurer接口,重写addCorsMappings方法,统一配置允许的域名、请求方式和请求头,这样全局的跨域策略就可以一次性搞定。

Spring MVC告诉浏览器可以跨域
图5:Spring MVC告诉浏览器可以跨域

接口设计上也要跟着调整,分离之后接口要设计得足够清晰,路径、参数、返回结构建议都有统一的规范,方便前端对接。很多项目组会统一封装一层返回结果,把状态码、提示信息和数据本体包在一个固定结构里,前端拿到手不用再猜格式,直接按约定取值就行。

封装一个统一返回对象
图6:封装一个统一返回对象

异常处理也不能沿用老思路,不能出错了就跳转一个错误页面,得用@ControllerAdvice配合@ExceptionHandler做全局异常捕获,把各种异常统一转成JSON格式的错误信息返回给前端,包含错误码和描述,前端拿到之后自己决定怎么提示用户。

创建全局异常处理器
图7:创建全局异常处理器

以上就是Spring MVC是如何和前端交互的,Spring MVC前后端分离怎么实现的全部内容了。Spring MVC和前端打交道靠的是DispatcherServlet统一收请求、HandlerMapping找方法、再靠注解完成参数绑定和返回值处理这一整套机制,而前后端分离说到底就是在这套机制里做了个选择,用@RestController让接口只出数据不出页面,再配上跨域配置和统一的异常处理,让前后端能各自独立开发互不牵扯。

 

180 1563 6924