java - 选择要在 RESTful Web 服务中发布的属性

标签 java spring rest jpa spring-boot

给定一个具有以下映射属性的 User 实体:

@Entity
@Table(name = "user")
public class User {

    //...

    @Id
    @GeneratedValue
    @Column(name = "user_id")
    private Long id;

    @Column(name = "user_email")
    private String email;

    @Column(name = "user_password")
    private String password;

    @Column(name = "user_type")
    @Enumerated(EnumType.STRING)
    private UserType type;

    @Column(name = "user_registered_date")
    private Timestamp registeredDate;

    @Column(name = "user_dob")
    @Temporal(TemporalType.DATE)
    private Date dateOfBirth;

    //...getters and setters
}

我创建了一个按 ID 返回用户的 Controller 方法。

@RestController
public class UserController {

    //...

    @RequestMapping(
            value = "/api/users/{id}", 
            method = RequestMethod.GET,
            produces = MediaType.APPLICATION_JSON_VALUE)
    public ResponseEntity<User> getUser(@PathVariable("id") Long id) {

        User user = userService.findOne(id);

        if (user != null) {
            return new ResponseEntity<User>(user, HttpStatus.OK);
        }

        return new ResponseEntity<User>(HttpStatus.NOT_FOUND);
    }

    //...
}

我的业务逻辑层中的服务。

public class UserServiceBean implements UserService {

    //...
    public User findOne(Long id) {
        User user = userRepository.findOne(id);
        return user;
    }

    //...
}

以及我的数据层中的存储库。

public interface UserRepository extends JpaRepository<User, Long> {

}

这工作正常,它返回有关用户的所有信息,但我在应用程序的几个不同部分中使用它,并且在某些情况下我只需要用户的特定字段。

我正在学习 spring-boot 来创建 Web 服务,并且想知道:鉴于当前的实现,是否有办法选择我想要在 Web 服务中发布的属性?

如果没有,我应该在实现中更改什么才能做到这一点?

谢谢。

最佳答案

首先,我同意使用DTO,但如果它只是一个虚拟的PoC,您可以在User属性中使用@JsonIgnore(jackson注释)来避免序列化它们,例如:

@Entity
@Table(name = "user")
public class User {

    //...

    @Column(name = "user_password")
    @JsonIgnore
    private String password;

但是您可以看到,由于您没有使用 DTO,因此您将混合使用 JPA 和 Jackson 注释(太糟糕了!)

有关 jackson 的更多信息:https://github.com/FasterXML/jackson-annotations

关于java - 选择要在 RESTful Web 服务中发布的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33918775/

相关文章:

java - 将@Controller注入(inject)另一个spring bean

java - 从 REST Web 服务向客户端发送 .apk 文件?

javascript - 如何避免在 Angular 4 上多次调用相同的 API?

java - 我在 Fiddler 从 Java 应用程序检测 HttpClient.execute(get) 时遇到困难

java - 使用 PHP 管理服务器

java - 什么是多重性

java - Spring 数据方面在 Intellij 14 中不起作用

java - 在 TestNG 中跳过测试的最佳做法是什么?

java - jOOQ + Spring : PSQLException: current transaction is aborted, 命令被忽略直到事务结束

java - 将 Winstone 嵌入 jetty 服务器