有些小伙伴发现了,明明在返回的实体类中指定了属性为transient。为什么前端得到的返回json中还是有这个属性的值?
类:
返回结果:
1. 序列化是什么?
1.1 是什么?
1.2 主要目的
1.3 Java 中的序列化
2. transient 是什么?
3. transient 关键字在JSON序列化的问题
4. 替代方案
为了在 JSON 序列化中排除某些字段,可以使用 JSON 序列化库提供的注解和方法。以下是常见的替代方案:既然是JSON不会识别transient 。那就用JSON能否识别的方式进行处理
4.1 使用 Jackson 的 @JsonIgnore
Jackson 提供了 @JsonIgnore 注解来控制哪些字段应该被序列化到 JSON 中。这是一个非常直观且易于理解的方法。
4.2 示例代码
假设你有一个 User 类,并且你不希望将 password 字段包含在 JSON 输出中。
import com.fasterxml.jackson.annotation.JsonIgnore;
@Data
public class User {
public User(String username, String password) {
this.username = username;
this.password = password;
}
private String username;
@JsonIgnore
private String password;
}
4.3 控制器类 UserController
假设你有一个控制器类 UserController,用于返回 User 对象。
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import com.fasterxml.jackson.databind.ObjectMapper;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@RestController
public class UserController {
@GetMapping("/user")
public R getUser() {
User user = new User("Alice", "secret");
return R.data(user);
}
}
4.4 输出结果
当你通过浏览器或工具访问 /user 接口时,返回的 JSON 将不再包含 password 字段。