spring boot 返回数据到前端

Spring Boot 0 696 0 2021-04-22 12:14:49

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

主题切换

颜色:

主题: