java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > SpringBoot中Controller参数与返回值

SpringBoot中Controller参数与返回值的用法总结

作者:水能zai舟

这篇文章主要介绍了SpringBoot中Controller参数与返回值的用法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

SpringBoot中Controller参数与返回值的用法

注解

类注解一律使用@RestController,方法注解是实际情况而定。

返回值

SpringBoot在实际后端开发中一般要为前端提供的数据是以json格式返回,其返回值类型我们大多采用以下方式

public Map<String, Object> function() {
    Map<String, Object> modelMap = new HashMap<>();
    //...我们将从数据中中获取的值放入value
    modelMap.put("key", value);
    return modelMap;
}

接收参数

普通参数

普通参数可以使用RESTful风格返回值,路由中注明{param},注意@PathVariable注解的使用

    @RequestMapping("/route/{param}")
    public Map<String, Object> queryAreaById(@PathVariable("param") Integer param) {
        Map<String, Object> modelMap = new HashMap<>();
        //...do something with param, save data in value
        modelMap.put("key", value);
        return modelMap;
    }

接收前端对象类型参数(json格式),对参数使用@RequestBody注解

    @RequestMapping(value = "/route", method = RequestMethod.POST)
    public Map<String, Object> updateArea(@RequestBody XObject xObject) {
        Map<String, Object> modelMap = new HashMap<>();
        //...do something with xObject, save data in value
        modelMap.put("key", value);
        return modelMap;
    }

springboot controller统一的接口返回值和异常处理

返回结果模型

@ApiModel("返回结果模型")
public class JsonResult<T> implements Serializable {
    @ApiModelProperty("返回结果提示")
    private String msg = null;
    @ApiModelProperty("返回结果状态")
    private String status = null;
    @ApiModelProperty("返回结果数据")
    private T result = null;
    public String getStatus() {
        return status;
    }
    public void setStatus(String status) {
        this.status = status;
    }
    public T getResult() {
        return result;
    }
    public void setResult(T result) {
        this.result = result;
    }
    public String getMsg() {
        return msg;
    }
    public void setMsg(String msg) {
        this.msg = msg;
    }
    public JsonResult(){
    }
    public JsonResult(String status, String msg, T result){
        this.status = status;
        this.msg = msg;
        this.result = result;
    }
    public JsonResult(String status, String msg){
        this.status = status;
        this.msg = msg;
    }
    public JsonResult(ResultEnum resultEnum){
        this.status = resultEnum.getStatus();
        this.msg = resultEnum.getMsg();
    }
    public JsonResult(ResultEnum resultEnum, T result){
        this.status = resultEnum.getStatus();
        this.msg = resultEnum.getMsg();
        this.result = result;
    }
}

返回编码枚举类模型

/**
 * @author code
 * @version 1.0
 * @Date 2021/8/9 13:55
 * @Description ${DESCRIPTION}
 */
public enum ResultEnum {
    SUCCESS("ok","调用成功"),
    ERROR("error","调用失败");
    private String status;
    private String msg;
    public String getStatus() {
        return status;
    }
    public void setStatus(String status) {
        this.status = status;
    }
    public String getMsg() {
        return msg;
    }
    public void setMsg(String msg) {
        this.msg = msg;
    }
    ResultEnum(String status,String msg){
        this.status = status;
        this.msg = msg;
    }
}

返回结果工具类

/**
 * @author code
 * @version 1.0
 * @Date 2021/7/22 15:50
 * @Description ${DESCRIPTION}
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
@ApiModel("数据返回结果")
public class ResultUtil<T> {
    public static JsonResult success(){
        return new JsonResult(ResultEnum.SUCCESS);
    }
    public static JsonResult success(String msg){
        return new JsonResult(ResultEnum.SUCCESS.getStatus(),msg);
    }
    public static <T> JsonResult<T> success(T result){
        return new JsonResult<T>(ResultEnum.SUCCESS, result);
    }
    public static JsonResult error(){
        return new JsonResult(ResultEnum.ERROR);
    }
    public static JsonResult error(String msg){
        return new JsonResult(ResultEnum.ERROR.getStatus(),msg);
    }
    public static <T> JsonResult error(T result){
        return new JsonResult<T>(ResultEnum.ERROR, result);
    }
}

controller统一处理返回值

/**
 * @author code
 * @version 1.0
 * @Date 2021/8/9 15:30
 * @Description ${统一返回值}
 */
@RestControllerAdvice
public class ControllerHandleAdvice implements ResponseBodyAdvice<Object> {
    private final static Logger logger = LoggerFactory.getLogger(ControllerHandleAdvice.class);
    @Override
    public boolean supports(MethodParameter methodParameter, Class<?extends HttpMessageConverter<?>> converterType){
        return true;
    }
    @Override
    public Object beforeBodyWrite(Object body, MethodParameter methodParameter, MediaType mediaType, Class<?extends HttpMessageConverter<?>> converterType, ServerHttpRequest request, ServerHttpResponse response){
        if(body instanceof String){
            String msg = (String) body;
            return ResultUtil.success(msg);
        } else if(null == body) {
        }
        return body;
    }
}

controller统一异常处理

/**
 * @author code
 * @version 1.0
 * @Date 2021/8/9 10:56
 * @Description ${统一异常返回值}
 */
@RestControllerAdvice
public class ControllerExceptionHandleAdvice {
    private final static Logger logger = LoggerFactory.getLogger(ControllerExceptionHandleAdvice.class);
    @ExceptionHandler
    public JsonResult handler(HttpServletRequest request, HttpServletResponse response,Exception e){
        logger.info("restful请求异常");
        JsonResult jsonResult = new JsonResult();
        if(e instanceof NullPointerException){
            logger.error("空指针异常");
            jsonResult.setStatus("error");
            jsonResult.setResult("空指针异常");
        }else if(e instanceof IllegalArgumentException){
            logger.error("请求参数类型不匹配");
            jsonResult.setStatus("error");
            jsonResult.setResult("请求参数类型不匹配");
        }else if(e instanceof SQLException){
            logger.error("数据库访问异常");
            jsonResult.setStatus("error");
            jsonResult.setResult("数据库访问异常");
        }else {
            logger.error("访问异常"+e.getMessage());
            jsonResult.setStatus("error");
            jsonResult.setResult("服务访问异常"+e.getMessage());
        }
        return jsonResult;
    }
}

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文