返回JSON数据的3种方式

一、使用@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数据响应给请求端。

发布了137 篇原创文章 · 获赞 28 · 访问量 24万+

猜你喜欢

转载自blog.csdn.net/shenxiaomo1688/article/details/103069451