概述

端午节跟游顺一起做了个小web系统,有账户模块和查询模块两部分。本来说三天做完这个初版的功能,但是仅账户登录就已经把我的时间耗尽了,也就没时间做查询了。登录用的Spring Security实现jwt认证,期间翻看过Spring文档和一篇博客,基本上还原出来了,也知道大概的原理。想说的不是这个登录,登录还没时间吃透。想说的是关于http接口请求的返回数据。

问题

SpringBoot接口返回数据极其简单,定义好一个对象,就可以返回对象格式的json了,甚至可以单纯返回字符串。

但是如果用HttpServletResponse对象如何操作呢?问题场景是,有时候在filter里就想返回请求结果。

如果想改变接口返回的HttpCode,又怎么做呢?场景是,有时候前端RD想用HttpCode做判断,而非一个正常的Http返回结果,需要判断返回数据中的某个字段。详见这里

解决方法

不多废话了,直接贴代码吧

import com.jiler.website.responseData.ResponseData;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/user")
public class UserController {
    /**
     * 返回对象
     *
     * @return
     */
    @GetMapping("/info")
    public ResponseData<String> userInfo(){
        ResponseData<String> responseData = new ResponseData<>();
        responseData.setData("wujunpeng");
        return responseData;
    }

    /**
     * 返回字符串
     *
     * @return
     */
    @GetMapping("/name")
    public String userName(){
        return "wujunpeng";
    }

    /**
     * 用response对象返回
     */
    @RequestMapping(value = "/alive", method = RequestMethod.GET)
    public void monitorAlive(HttpServletResponse response) throws IOException {
        Map<String, Object> result = new HashMap<>();
        result.put("status", 0);
        result.put("message", "执行完毕");
        response.setContentType("text/html;charset=utf-8");
        response.getWriter().print(MyJsonUtils.toJson(result));
    }

    /**
     * 用response对象修改HttpCode
     */
    @GetMapping("/password")
    public void password(HttpServletResponse response) throws IOException {
        response.sendError(HttpServletResponse.SC_FORBIDDEN, "禁止请求密码接口");
         // response.setStatus(HttpServletResponse.SC_FORBIDDEN); // 用这个也行。
    }
}