在Spring Boot的GET方法中向响应JSON添加字段。

huangapple go评论104阅读模式
英文:

Adding fields to response json in spring boot get method

问题

我有一个从仓库向REST控制器提供数据的服务:

  1. @Service
  2. public class TaskServiceImpl implements TaskService {
  3. @Autowired
  4. private TaskRepository taskRepository;
  5. @Override
  6. public List<Task> getAllTasks() {
  7. return taskRepository.findAll();
  8. }
  9. }

还有一个REST控制器:

  1. @RestController
  2. @RequestMapping("/tasks")
  3. public class TaskController {
  4. @Autowired
  5. private TaskService taskService;
  6. @GetMapping
  7. public List<Task> getAllTasks() {
  8. return taskService.getAllTasks();
  9. }
  10. }

我的任务是不仅返回所有任务,还要返回两个字段 - 待办任务数和已完成任务数。我知道如何从数据库中获取这个计数。但是如何将这些字段添加到响应JSON中呢?响应JSON必须如下所示:

  1. {
  2. "tasks": [
  3. {
  4. "createTime": null,
  5. "updateTime": null,
  6. "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  7. "title": "待办任务",
  8. "description": "blabla",
  9. "priority": "HIGH",
  10. "done": false
  11. },
  12. {
  13. "createTime": null,
  14. "updateTime": null,
  15. "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  16. "title": "已完成任务",
  17. "description": "blabla",
  18. "priority": "HIGH",
  19. "done": true
  20. }
  21. ],
  22. "todoCount": 1,
  23. "doneCount": 1
  24. }
英文:

I have the service that gives data from repository to rest controller:

  1. @Service
  2. public class TaskServiceImpl implements TaskService {
  3. @Autowired
  4. private TaskRepository taskRepository;
  5. @Override
  6. public List&lt;Task&gt; getAllTasks() {
  7. return taskRepository.findAll();
  8. }
  9. }

And also rest controller:
@RestController
@RequestMapping("/tasks")
public class TaskController {
@Autowired
private TaskService taskService;

  1. @GetMapping
  2. public List&lt;Task&gt; getAllTasks() {
  3. return taskService.getAllTasks();
  4. }
  5. }

My task is to return not only all the tasks but two fields two - todo tasks count and ready tasks count. I know how find this count from db. But what is the proper way to add this fields to response json? Response json must look like:

  1. {
  2. [
  3. {
  4. &quot;createTime&quot;: null,
  5. &quot;updateTime&quot;: null,
  6. &quot;id&quot;: &quot;3fa85f64-5717-4562-b3fc-2c963f66afa6&quot;,
  7. &quot;title&quot;: &quot;todo-task&quot;,
  8. &quot;description&quot;: &quot;blabla&quot;,
  9. &quot;priority&quot;: &quot;HIGH&quot;,
  10. &quot;done&quot;: false,
  11. },
  12. {
  13. &quot;createTime&quot;: null,
  14. &quot;updateTime&quot;: null,
  15. &quot;id&quot;: &quot;3fa85f64-5717-4562-b3fc-2c963f66afa6&quot;,
  16. &quot;title&quot;: &quot;done-task&quot;,
  17. &quot;description&quot;: &quot;blabla&quot;,
  18. &quot;priority&quot;: &quot;HIGH&quot;,
  19. &quot;done&quot;: true,
  20. }
  21. ],
  22. todoCount: 1,
  23. doneCount: 1
  24. }

答案1

得分: 0

你可以通过创建一个新的模型,由Controller返回,并设置你的todoCount和doneCount值:

  1. @GetMapping
  2. public TasksModel getAllTasks() {
  3. // 获取 todoCount 和 doneCount 值
  4. TasksModel tasksModel = new TasksModel();
  5. tasksModel.setTaskModelList(taskService.getAllTasks());
  6. tasksModel.setTodoCount(todoCount);
  7. tasksModel.setDoneCount(doneCount);
  8. return tasksModel;
  9. }

而TasksModel的定义如下:

  1. class TasksModel {
  2. List<Task> taskModelList;
  3. int todoCount;
  4. int doneCount;
  5. // getter
  6. // setter
  7. }
英文:

you can do that by creating new model to be returned by the Controller and set your todoCount and doneCount values:

  1. @GetMapping
  2. public TasksModel getAllTasks() {
  3. // get todoCount and doneCount values
  4. TasksModel tasksModel = new TasksModel();
  5. tasksModel.setTaskModelList(taskService.getAllTasks())
  6. tasksModel.setTodoCount(todoCount);
  7. tasksModel.setDoneCount(doneCount);
  8. return taskModel;
  9. }

and TasksModel is :

  1. class TasksModel {
  2. List&lt;Task&gt; taskModelList;
  3. int todoCount;
  4. int doneCount;
  5. //getter
  6. //setter
  7. }

huangapple
  • 本文由 发表于 2020年10月24日 18:31:48
  • 转载请务必保留本文链接:https://go.coder-hub.com/64512397.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定