首页 > 解决方案 > spring boot + h2 + jpa项目的问题

问题描述

这是我的User课:

@Data
@Entity
public class User {

    @Id @GeneratedValue Long userID;
    String eMail;
    String phoneNumber;
    String displayName;
    //File displayPicture;
    String firstName;
    String middleName;
    String lastName;
    ArrayList<ClassRoom>adminOf=new ArrayList<>();
    ArrayList<ClassRoom>memberOf=new ArrayList<>();
    @NotNull
    int rating;
    boolean isTeacher;
    ArrayList<Assignment>assignmentsToSubmit=new ArrayList<>();
    ArrayList<Assignment>assignmentsSubmitted=new ArrayList<>();

    @OneToOne(fetch = FetchType.LAZY,targetEntity = LoginCredential.class)
    @JoinColumn(name = "userID",referencedColumnName = "userID")
    private LoginCredential loginCredential;

    User() {
    }
}

这是控制器,UserController类:

@RestController
class UserController {

    private final UserRepository repository;
    UserController(UserRepository repository) {
        this.repository = repository;
    }

    @GetMapping("/user/{id}")
    User one(@PathVariable Long id) {
        return repository.findById(id).orElseThrow(() -> new UserNotFoundException(id));
    }
}

http://localhost:8080/user/1通过浏览器访问。这是输出:

spring-h2-jpa 获取映射

这里loginCredential也出现了,但我想退回除它之外的所有东西。

如果没有其他课程,如何做到这一点?

标签: springspring-bootjpah2

解决方案


@JsonIgnore添加到字段定义中。或者,您可以在类级别使用@JsonIgnoreProperties

我注意到您尝试为字段提供私有访问修饰符。这不会将字段隐藏到 JSON 序列化程序,因为您的类使用 Lombok 的@Data进行注释,当在没有 @Getter/@Setter 且具有覆盖访问权限的情况下使用时,将对生成的方法的访问权限设置为公共。


推荐阅读