返回更多响应的属性(来自数据库模型外部)

时间:2017-05-29 12:21:22

标签: mysql hibernate spring-boot spring-data-jpa response

如何在GET响应中返回更多值?

我在数据库中的表格如下所示:

user(id, login, password)
question(id, user_id, value, created_date, status, first_answer, second_answer)
answer(id, question_id, user_id, value)

对于每个问题,只有两个可能的答案。 我使用POST来回答问题(资源/答案)。

现在,当我执行GET / questions / 1时,它会返回此答案

{
    "id" : 1,
    "value" : "Example",
    "createdDate" : 1495825431000,
    "firstAnswer" : "A",
    "secondAnswer" : "B",
    "status" : "accepted"
}

(没有用户,因为我在此使用@JsonIgnore)

现在我想发出GET请求并获得更多值(例如创建问题的用户的登录名和两个显示第一个答案和第二个答案选择次数的计数器。

{
    "id" : 1,
    "value" : "Example",
    "createdDate" : 1495825431000,
    "firstAnswer" : "A",
    "secondAnswer" : "B",
    "status" : "accepted",
    "createdBy" : "John",
    "firstCount" : 120,
    "secondCount" : 80
}

怎么做? 我很乐意在Springboot中使用一个查询来完成它。 例如:

SELECT q.id, q.value, q.first_answer, q.second_answer, q.created_date, q.status,
(SELECT COUNT(answer) FROM answer WHERE answer = 1 AND question_id = q.id) AS 'first_count', 
(SELECT COUNT(answer) FROM answer WHERE answer = 2 AND question_id = q.id) AS 'second_count',
(SELECT u.login FROM user u WHERE u.id = q.user_id) AS 'createdBy'
FROM question q

我的模特课程如下:

@Entity
@Table(name = "question")
public class Question {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column
    private Integer id;

    @JsonIgnore
    @ManyToOne
    @JoinColumn(nullable = false)
    private User user;

    @Column(nullable = false)
    private String value;

    @Column(nullable = false)
    private Timestamp createdDate;

    @Column(nullable = false)
    private String firstAnswer;

    @Column(nullable = false)
    private String secondAnswer;

    @Column(nullable = false)
    private String status;

    public Question() {
    }

    //getters, setters, etc. 

}

我的存储库类看起来像这样:

public interface QuestionsRepository extends CrudRepository<Question, Integer> {
}

我不想在数据库中创建新行。

我知道我可以在Controller的类中填充@Transient变量。但是我不想做很多数据库查询 - 我想在一个查询中执行它,它更快。

1 个答案:

答案 0 :(得分:0)

将对象从数据库返回到客户端是不好的做法。你应该删除注释@JsonIgnore,你应该使用DTO,检查这个link

在DTO中,您可以拥有任意数量的属性。此外,您可以拥有多个对象的属性。

相关问题