全部学科
Python全栈
python
NodeJS全栈
nodejs
小程序首页
📅 2026-05-18 5 分钟 ✍️ juanwangdev

Spring MVC @ResponseBody注解

@ResponseBody 将方法返回值作为响应体返回,而非解析为视图名。

基本用法

Java
@Controller
public class UserController {

    @GetMapping("/user/{id}")
    @ResponseBody
    public User getUser(@PathVariable Long id) {
        return userService.findById(id);
    }
}

返回的 User 对象会被序列化为 JSON:

JSON
{
    "id": 1,
    "name": "张三",
    "email": "zhangsan@example.com"
}

方法级别使用

Java
@Controller
public class ApiController {

    @GetMapping("/api/data")
    @ResponseBody
    public Map<String, Object> data() {
        Map<String, Object> result = new HashMap<>();
        result.put("code", 200);
        result.put("message", "success");
        return result;
    }
}

类级别使用

Java
@Controller
@ResponseBody
public class UserController {
    // 所有方法都返回响应体
}

// 等价于
@RestController
public class UserController {
    // ...
}

返回类型

返回类型说明
对象自动序列化为 JSON
String直接返回字符串
byte[]二进制数据
ResponseEntity包含状态码和响应头
Java
@GetMapping("/text")
@ResponseBody
public String text() {
    return "Hello World";
}

@GetMapping("/bytes")
@ResponseBody
public byte[] bytes() {
    return "binary data".getBytes();
}

@GetMapping("/entity")
@ResponseBody
public ResponseEntity<User> entity() {
    User user = userService.findById(1L);
    return ResponseEntity.ok()
            .header("X-Custom-Header", "value")
            .body(user);
}

内容协商

根据 Accept 请求头返回不同格式:

Java
@GetMapping(value = "/user/{id}", produces = {
    MediaType.APPLICATION_JSON_VALUE,
    MediaType.APPLICATION_XML_VALUE
})
@ResponseBody
public User getUser(@PathVariable Long id) {
    return userService.findById(id);
}

配置消息转换器

Java
@Configuration
public class WebConfig implements WebMvcConfigurer {

    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
        converter.setObjectMapper(new ObjectMapper());
        converters.add(converter);
    }
}

与 ResponseEntity 对比

Java
// 使用 @ResponseBody
@GetMapping("/user/{id}")
@ResponseBody
public User getUser(@PathVariable Long id) {
    return userService.findById(id);
}

// 使用 ResponseEntity
@GetMapping("/user/{id}")
public ResponseEntity<User> getUser(@PathVariable Long id) {
    User user = userService.findById(id);
    if (user == null) {
        return ResponseEntity.notFound().build();
    }
    return ResponseEntity.ok(user);
}

@RestController = @Controller + @ResponseBody,REST API 推荐使用。

要点总结

  • @ResponseBody 将返回值写入响应体
  • 默认使用 Jackson 序列化为 JSON
  • 类级别使用等价于 @RestController
  • 可配合 ResponseEntity 返回状态码

📝 发现内容有误?点击此处直接编辑

← 上一篇 Spring MVC @RequestParam注解
下一篇 → 乱码问题原因
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库