如何在 Spring Boot 中返回 JSON 响应?
Posted
技术标签:
【中文标题】如何在 Spring Boot 中返回 JSON 响应?【英文标题】:How to return JSON response in Springboot? 【发布时间】:2021-02-20 09:29:17 【问题描述】:我想在 Spring Boot 中返回类似这样的 json 响应:
"status" : true,
"message" : "Data is found",
"data" : single object or list of object
我的 RestController 是这样的
@GetMapping("/users")
public JSONObject getAllUsers()
List<User> user = repository.findAll(); // get all users from db
JSONObject jsonObject = new JSONObject();
jsonObject.put("status", true);
jsonObject.put("message", "Data is found");
jsonObject.put("data", user);
return jsonObject;
但我收到了类似这样的回复
"empty": false
那么,如何以我上面提到的格式返回 json 响应?
【问题讨论】:
【参考方案1】:您可以简单地返回具有这些属性的对象。 例如声明一个代表你想要的响应的新类:
public class UserResponse
private Boolean status;
private String message;
private List data;
public UserResponse()
// setters & getters
然后改变你的控制器:
@GetMapping("/users")
public UserResponse getAllUsers()
List<User> user = repository.findAll(); // get all users from db
UserResponse userResponse = new UserResponse();
userResponse.setStatus(true);
userResponse.setMessage("Data is found");
userResponse.setData(user);
return userResponse;
要深入了解您的方法有什么问题,您可以查看this answer
【讨论】:
【参考方案2】:您可以使用以下方式,以便您响应任何您想要的数据。我已经用了很长时间了。
public class ApiResponse
private boolean status;
private String message;
private Object data;
private ErrorCode errorCode;
//use constructors instead of setters
//getters
【讨论】:
【参考方案3】:1.简单最快的解决方案是:
您可以返回一个 Map 作为返回类型,以在客户端获取 JSON 数据,如下所示
@GetMapping("/users")
public Map<String,?> getAllUsers()
List<User> user = repository.findAll(); // get all users from db
Map<String, List> map = new HashMap<String, List>(); // use new HashMap<String, Object>(); for single result
map.put("status", true);
map.put("message", "Data is found");
map.put("data", user);
return map;
2。通过创建自定义响应类的其他解决方案:
在这里,您将为所有回复创建一个模型:如下所示
模型响应:
public class ResponseModel<T>
private Boolean status;
private String message;
private T data;
public Boolean getStatus()
return status;
public void setStatus(Boolean status)
this.status = status;
public String getMessage()
return message;
public void setMessage(String message)
this.message = message;
public T getData()
return data;
public void setData(T data)
this.data = data;
你的控制器应该看起来像
@GetMapping("/users")
public ResponseModel<?> getAllUsers()
List<User> users = repository.findAll();
ResponseModel response = new ResponseModel<List<User>>();
// use ResponseModel<User>(); constuructor for a single user response
response.setStatus(true);
response.setMessage("Data is found");
response.setData(users);
return response;
【讨论】:
Map
原始类型让我很难过,将Object
值映射分配给List
值一个也是如此。
@BoristheSpider 我已经添加了一个类模型响应,但是请您详细说明为什么返回地图会是一个坏主意,thnx ps:在地图泛型类型中,同意更改为列表(根据返回类型)【参考方案4】:
可以在springboot中使用GSON依赖,
@GetMapping("/users")
public String getAllUsers()
Gson gson = new Gson();
List < User > user = repository.findAll(); // get all users from db
JSONObject jsonObject = new JSONObject();
jsonObject.put("status", true);
jsonObject.put("message", "Data is found");
jsonObject.put("data", user);
String jsonInString = gson.toJson(jsonObject);
return jsonInString;
【讨论】:
以上是关于如何在 Spring Boot 中返回 JSON 响应?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Spring Boot REST API 中格式化返回的 json?
如何在 Spring Boot 中使用 Hibernate/JPA 返回多级 json
Spring Boot 控制器建议 - 如何返回 XML 而不是 JSON?