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

 更新时间:2023年07月19日 08:46:36   作者:水能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;
    }
}

总结

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

相关文章

  • Spring Security使用多种加密方式进行密码校验的代码示例

    Spring Security使用多种加密方式进行密码校验的代码示例

    在Web应用中,密码的安全存储和验证是至关重要的,本文将通过一个具体的代码示例,介绍和总结如何在Spring Security中使用多种加密方式进行密码校验,文中通过代码讲解得非常详细,需要的朋友可以参考下
    2024-06-06
  • 带大家认识Java语法之泛型与通配符

    带大家认识Java语法之泛型与通配符

    使用泛型的目的是利用Java编译机制,在编译过程中帮我们检测代码中不规范的有可能导致程序错误的代码,下面这篇文章主要给大家介绍了关于Java泛型与通配符的相关资料,需要的朋友可以参考下
    2022-03-03
  • springboot如何使用@ConfigurationProperties封装配置文件

    springboot如何使用@ConfigurationProperties封装配置文件

    springboot如何使用@ConfigurationProperties封装配置文件的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • spring boot 加载web容器tomcat流程源码分析

    spring boot 加载web容器tomcat流程源码分析

    本文章主要描述spring boot加载web容器 tomcat的部分,为了避免文章知识点过于分散,其他相关的如bean的加载,tomcat内部流程等不做深入讨论,具体内容详情跟随小编一起看看吧
    2021-06-06
  • java设计模式--三种工厂模式详解

    java设计模式--三种工厂模式详解

    这篇文章主要为大家详细介绍了Java设计模式之工厂模式,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能给你带来帮助
    2021-07-07
  • RestTemplate如何添加请求头headers和请求体body

    RestTemplate如何添加请求头headers和请求体body

    这篇文章主要介绍了RestTemplate如何添加请求头headers和请求体body问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • SpringCloud分布式事务Seata部署和集成过程

    SpringCloud分布式事务Seata部署和集成过程

    这篇文章主要介绍了SpringCloud分布式事务Seata部署和集成过程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-10-10
  • Java中byte输出write到文件的实现方法讲解

    Java中byte输出write到文件的实现方法讲解

    今天小编就为大家分享一篇关于Java中byte输出write到文件的实现方法讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03
  • Java字符串数字左右补全0的四种方式

    Java字符串数字左右补全0的四种方式

    这篇文章主要给大家介绍了关于Java字符串数字左右补全0的四种方式,在编程中有时候我们需要对一个字符串进行字符填充,以满足某些特定的要求,其中补全0是一种常见的需求,需要的朋友可以参考下
    2023-08-08
  • 详解Java面向对象之多态的原理与实现

    详解Java面向对象之多态的原理与实现

    多态是指不同的子类在继承父类后分别都重写覆盖了父类的方法,即父类同一个方法,在继承的子类中表现出不同的形式。本文将详解多态的原理与实现,感兴趣的可以学习一下
    2022-05-05

最新评论