@responsebody 作用是让方法返回值直接写入 http 响应体而非走视图解析,spring 自动用 jackson 序列化为 json;需有 jackson 依赖、标准 getter 和无参构造器,支持 @jsonignore 等注解定制序列化行为。

在 Spring MVC 中,@ResponseBody 的作用是告诉 Spring:这个方法的返回值不要走视图解析(比如跳转页面),而是直接写入 HTTP 响应体。配合 Jackson(默认 JSON 处理库),Spring 会自动把 Java 对象序列化为 JSON 字符串并设好 Content-Type: application/json。
确保项目有 Jackson 依赖
Spring Boot 2.3+ 默认已包含 jackson-databind,无需额外引入;如果是老版本或传统 Spring MVC,需确认 classpath 下有:
com.fasterxml.jackson.core:jackson-corecom.fasterxml.jackson.core:jackson-databindcom.fasterxml.jackson.core:jackson-annotations
Maven 示例(Spring Boot 通常不用显式加):
<dependency><groupid>com.fasterxml.jackson.core</groupid><artifactid>jackson-databind</artifactid></dependency>
在 Controller 方法上添加 @ResponseBody
可以直接加在方法上,也可以加在类上(表示整个类所有方法都启用):
@RestController // 等价于 @Controller + @ResponseBody(推荐)
或者单独使用:
@Controller
public class UserController {
@GetMapping("/user")
@ResponseBody // 关键:触发自动 JSON 序列化
public User getUser() {
return new User(1L, "张三", 28);
}
}
确保对象有标准 getter 和无参构造器
Jackson 默认通过 getter 方法读取属性,所以字段要提供 public getter(如 getName())。同时建议保留无参构造器(尤其用 Lombok 时加 @NoArgsConstructor):
public class User {
private Long id;
private String name;
private int age;
// 必须有无参构造器
public User() {}
public User(Long id, String name, int age) {
this.id = id;
this.name = name;
this.age = age;
}
// getter 方法(Jackson 依赖它们)
public Long getId() { return id; }
public String getName() { return name; }
public int getAge() { return age; }
}
自定义序列化行为(可选)
常见需求可通过注解控制:
-
@JsonIgnore:忽略某个字段不序列化 -
@JsonProperty("user_name"):重命名字段名 -
@JsonFormat(pattern = "yyyy-MM-dd"):格式化日期 -
@JsonIgnoreProperties({"password"}):类级别忽略字段
例如:
public class User {
private Long id;
@JsonProperty("user_name")
private String name;
@JsonIgnore
private String password;
@JsonFormat(pattern = "yyyy-MM-dd")
private Date createTime;
// ...
}
不复杂但容易忽略的是:返回值类型必须是具体对象(或 Map、List 等可序列化结构),不能是 void 或原始类型(如 int)——否则 Spring 会报错或返回空响应。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











