@RestController
是 Spring 框架中的一个注解,位于 org.springframework.web.bind.annotation
包下,用于标记一个类为 RESTful Web 服务的控制器。它结合了 @Controller
和 @ResponseBody
两个注解的功能。下面详细介绍:
功能详解
@Controller
:该注解用于标记一个类为 Spring MVC 控制器,Spring 会自动扫描并将其注册到应用上下文里,让这个类能够处理 HTTP 请求。@ResponseBody
:该注解告知 Spring MVC 把控制器方法的返回值直接作为 HTTP 响应体返回,而不是去查找视图进行渲染。
@RestController
相当于同时使用 @Controller
和 @ResponseBody
,简化了代码编写。
代码示例
如果在你代码里,@RestController
注解标记了 SysMenuController
类,表明这个类是一个 RESTful 控制器,会处理 HTTP 请求并直接返回数据。如下举例类中的方法:
/** * 获取菜单列表 */ @PreAuthorize("@ss.hasPermi('system:menu:list')") @GetMapping("/list") public AjaxResult list(SysMenu menu) { List<SysMenu> menus = menuService.selectMenuList(menu, getUserId()); return success(menus); }
Spring MVC 借助 @RestController
注解,识别到控制器方法返回值需直接作为 HTTP 响应体返回。接着,Spring MVC 会使用消息转换器(HttpMessageConverter
)把 AjaxResult
对象转换为合适的格式(一般是 JSON)。默认情况下,Spring Boot 会使用 MappingJackson2HttpMessageConverter
把对象转换为 JSON 字符串。可以将 AjaxResult
替换成自己的 Java Bean。AjaxResult
本质是一个用于封装接口响应数据的类,你完全能自定义一个 Java Bean 来实现相同功能。
在 Spring Boot 项目里,若使用 @RestController
注解,框架默认会把控制器方法返回的对象(像 CustomResponse
)转换为 JSON 格式返回给前端。这一转换借助 HttpMessageConverter
实现,默认情况下,Spring Boot 集成了 Jackson 库,使用 MappingJackson2HttpMessageConverter
作为消息转换器。
转换用到的库
Spring Boot 默认使用的 JSON 处理库是 Jackson,它是一个功能强大、广泛使用的 Java JSON 处理库。Jackson 能把 Java 对象序列化为 JSON 字符串,也能把 JSON 字符串反序列化为 Java 对象。依赖通常在 Spring Boot 项目的 spring-boot-starter-web
里已经包含,示例如下
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
下面AI 提供的自定义库方式,做个记录,我并没去实践,看起来应该是对的,大家可以试试看哈。
自定义 JSON 库
可以自定义 JSON 库,常见的替代库有 Gson 和 FastJSON。下面分别介绍如何使用这两个库替换默认的 Jackson。
使用 Gson
Gson 是 Google 开发的 JSON 处理库。
- 添加依赖:在
pom.xml
中添加 Gson 依赖。
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
</dependency>
- 配置消息转换器:创建一个配置类,配置
GsonHttpMessageConverter
。
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.json.GsonHttpMessageConverter;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import java.util.List;
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Bean
public Gson gson() {
return new GsonBuilder().create();
}
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
GsonHttpMessageConverter converter = new GsonHttpMessageConverter();
converter.setGson(gson());
converters.add(0, converter);
}
}
使用 FastJSON
FastJSON 是阿里巴巴开源的高性能 JSON 处理库。
- 添加依赖:在
pom.xml
中添加 FastJSON 依赖。
<dependency>
<groupId>com.alibaba.fastjson2</groupId>
<artifactId>fastjson2</artifactId>
<version>2.0.44</version>
</dependency>
- 配置消息转换器:创建一个配置类,配置
FastJsonHttpMessageConverter
。
import com.alibaba.fastjson2.support.spring6.http.converter.FastJsonHttpMessageConverter;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import java.util.List;
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter();
converters.add(0, converter);
}
}