一、使用@RestController注解,示例:
@RestControler
@RequestMapping("")
public class TestController {
@RequestMapping("/getUser")
public User getUser(){
User user = new User(1, "Sam", 21);
return user;
}
}
二、使用@ResponseBody注解,示例:
@Controller
@RequestMapping("/user")
public class GetVerifyCodeController{
@RequestMapping("/getVerifyCode")
@ResponseBody
public Map GetPendiVerifyCode(HttpServletRequest request, HttpServletResponse response)
throws Exception{
String telNumber=request.getParameter("mobilePhone");
String messageType=request.getParameter("messageType");
Map<String,Object>resultMap=new HashMap<>();
int status=0;
String msg=null;
if(StringUtils.isBlank(telNumber)||StringUtils.isBlank(messageType)){
resultMap.put("status",0);
resultMap.put("msg","参数缺失");
return resultMap;
}
}
}
三、使用response.getWriter().println方式:
@Controller
@RequestMapping("/user")
public class GetVerifyCodeController{
@RequestMapping("/GetVerifyCode")
public void GetVerifyCode(HttpServletRequest request,HttpServletResponse response)throws Exception{
String telNumber=request.getParameter("telNumber");
String messageType=request.getParameter("messageType");
Map<String,Object>map=new HashMap<>();
if(StringUtils.isBlank(telNumber)||StringUtils.isBlank(messageType)){
int status=0;
map.put("status",status);
String data=new Gson.toJson(map);
sendJsonData(response,data);
return;
}
}
protected void sendJsonData(HttpServletResponse response, String data) throws Exception{
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
out.println(data);
out.flush();
out.close();
}
}
以上展示了 Spring Boot 返回 JSON 数据的三种方式,但在实际项目中,我们可以通过定义统一的 JSON 结构,然后在controller层直接调用即可,提高代码复用性。如下:
@Data
public class JsonResults<T> {
//状态码
private int status;
//提示信息
private String msg;
//推送的数据
private T data;
/**
* 若请求数据时缺失参数,设置状态码为 0,提示信息为“请求参数缺失!”
*/
public JsonResults() {
this.status = 0;
this.msg = "请求参数缺失!";
}
/**
* 若没有数据返回,可以人为指定状态码和提示信息
* @param status
* @param msg
*/
public JsonResults(int status, String msg) {
this.status = status;
this.msg = msg;
}
/**
* 有数据返回时,状态码为 1,默认提示信息为“获取数据成功!”
* @param data
*/
public JsonResults(T data) {
this.data = data;
this.status = 1;
this.msg = "获取数据成功!";
}
/**
* 有数据返回,状态码为 1,人为指定提示信息
* @param data
* @param msg
*/
public JsonResults(T data,String msg) {
this.status = 1;
this.msg = msg;
this.data=data;
}
}
控制层的引用:
@RestController
public class UpdatePwdController {
/**
* 用于修改密码
* @param request
* @param response
* @throws Exception
*/
@SuppressWarnings({"unchecked"})
@RequestMapping("/updatePwd")
public JsonResults updateAM300BPwd(HttpServletRequest request, HttpServletResponse response)throws Exception{
response.setContentType("text/html;charset=UTF-8");
String authCode=request.getParameter("authCode");
String telNumber=request.getParameter("telNumber");
String newPassword=request.getParameter("newPassword");
if (StringUtils.isBlank(authCode)||StringUtils.isBlank(newPassword)||StringUtils.isBlank(telNumber)) {
return new JsonResults();
}
这样,在请求参数缺失时,就会将{"status":0,"msg":"请求参数缺失!"}的json数据响应给请求端。