若依springboot Controller返回详解

@RestController 是 Spring 框架中的一个注解,位于 org.springframework.web.bind.annotation 包下,用于标记一个类为 RESTful Web 服务的控制器。它结合了 @Controller 和 @ResponseBody 两个注解的功能。下面详细介绍:

功能详解

  1. @Controller:该注解用于标记一个类为 Spring MVC 控制器,Spring 会自动扫描并将其注册到应用上下文里,让这个类能够处理 HTTP 请求。
  2. @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 处理库。

  1. 添加依赖:在 pom.xml 中添加 Gson 依赖。
<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
</dependency>
  1. 配置消息转换器:创建一个配置类,配置 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 处理库。

  1. 添加依赖:在 pom.xml 中添加 FastJSON 依赖。
<dependency>
    <groupId>com.alibaba.fastjson2</groupId>
    <artifactId>fastjson2</artifactId>
    <version>2.0.44</version>
</dependency>
  1. 配置消息转换器:创建一个配置类,配置 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);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值