@ResponseBody注解的使用

@ResponseBody 注解是 Spring MVC 中的一个核心注解,用于指示控制器方法的返回值应直接写入 HTTP 响应体(而非视图解析)。以下是详细说明和使用示例:


核心作用

  1. 跳过视图解析器
    方法返回值不经过 ViewResolver 解析为 HTML 页面,而是直接作为响应内容(JSON/XML/纯文本等)。
  2. 自动序列化
    结合 HttpMessageConverter,自动将对象转换为客户端需要的格式(如 JSON)。

使用场景

1. 返回字符串(纯文本)

@Controller
public class TextController {
    
    @GetMapping("/hello")
    @ResponseBody
    public String hello() {
        return "Hello World!"; // 直接返回字符串到响应体
    }
}

访问 /hello 输出:Hello World!

2. 返回 JSON 对象(RESTful API)

@Controller
public class UserController {

    @GetMapping("/user")
    @ResponseBody
    public User getUser() {
        return new User("Alice", 25); // 自动序列化为JSON
    }
}

// 实体类
public class User {
    private String name;
    private int age;
    // 省略构造方法/getter/setter
}

访问 /user 输出:{"name":"Alice","age":25}


简化写法:@RestController

Spring 4.0+ 提供组合注解 @RestController = @Controller + @ResponseBody

@RestController // 类中所有方法自动添加 @ResponseBody
public class ApiController {

    @GetMapping("/data")
    public Map<String, Object> getData() {
        return Map.of("status", 200, "message", "success");
    }
}

关键配置

1. 依赖(Spring Boot 自动配置)

确保项目中包含 JSON 库(默认使用 Jackson):

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

2. 自定义序列化(如日期格式)

@Configuration
public class WebConfig implements WebMvcConfigurer {
    
    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder()
                .dateFormat(new SimpleDateFormat("yyyy-MM-dd"));
        converters.add(new MappingJackson2HttpMessageConverter(builder.build()));
    }
}

常见问题

Q1: 返回中文字符乱码?

@RequestMapping 中指定编码:

@RequestMapping(value = "/text", produces = "text/plain;charset=UTF-8")
@ResponseBody
public String text() {
    return "中文内容";
}

Q2: 如何返回 XML 格式?

  1. 添加 XML 转换器依赖(如 Jackson XML):
    <dependency>
        <groupId>com.fasterxml.jackson.dataformat</groupId>
        <artifactId>jackson-dataformat-xml</artifactId>
    </dependency>
    
  2. 客户端通过 Accept: application/xml 头请求 XML 数据。

总结

场景 用法 示例返回值
返回纯文本 @ResponseBody + String "Success"
返回 JSON/XML 对象 @ResponseBody + 自定义对象 {"id":1}
RESTful API 控制器 直接使用 @RestController 自动处理序列化

通过 @ResponseBody,Spring 能高效构建 RESTful 服务,实现前后端分离架构中的数据交互。

posted @ 2024-01-04 11:30  bigger_apple  阅读(144)  评论(0)    收藏  举报