Spring开发中GET请求时如何不将指定数据库字段映射到Java模型类
适用场景对应注解方案
分两种常见情况对应不同注解:
情况1:字段仅不需要返回到前端,实体类仍需要和数据库映射
Spring Web默认使用Jackson做JSON序列化,直接在实体类对应字段上加@JsonIgnore注解即可,所有序列化到JSON的场景(包括GET请求返回)都会自动忽略该字段,不会出现在响应报文中。
示例代码:
import com.fasterxml.jackson.annotation.JsonIgnore; import jakarta.persistence.Id; import jakarta.persistence.Table; @Table(name = "user") public class User { @Id private Long id; private String username; // 该字段不会序列化到JSON响应中 @JsonIgnore private String sensitiveInfo; // 省略getter、setter }
如果你需要更灵活的控制,比如只有GET请求返回时忽略,其他业务场景需要序列化该字段,可以使用@JsonView做视图分组:
- 先定义视图分组类
public class Views { // 对外接口返回的视图组 public interface Public {} // 内部场景使用的视图组 public interface Internal extends Public {} }
- 实体类标注对应视图
public class User { @JsonView(Views.Public.class) private Long id; @JsonView(Views.Public.class) private String username; // 只有Internal视图组才会序列化该字段 @JsonView(Views.Internal.class) private String sensitiveInfo; }
- GET接口上标注对外视图即可
@GetMapping("/user/{id}") @JsonView(Views.Public.class) public User getUser(@PathVariable Long id) { // 业务查询逻辑 return user; }
情况2:字段完全不需要映射到实体类,仅存在于数据库表中
如果这个数据库字段你在业务逻辑中完全不需要用到,不需要ORM框架做映射,可以在字段上加JPA的@Transient注解,ORM框架会忽略该字段和数据库的映射关系。
内容的提问来源于stack exchange,提问作者Tanya Sah
相关产品推荐
相关产品推荐

