springboot 九-响应结果

统一响应大对象

resultCode : 1成功 0失败
message :提示信息
data:json文件

响应data 状态码 message

涉及信息包括
响应数据data

package com.example.questionlist2.common;

import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.io.Serializable;

@Data
public class resultDto<T> implements Serializable {
    @ApiModelProperty(value = "响应Code,其中1表示成功 0表示失败",required = true,example = "1",allowableValues = "0")
    private Integer resultCode;
    @ApiModelProperty(value ="响应信息")
    private String message="";
    @ApiModelProperty(value = "响应数据")
    private T data=null;


    public static resultDto newResultDto(){
        return new resultDto();
    }

    //状态为成功  重载  函数name一致 但是参数不一样 调用的时候会区别的
    public static resultDto sucess(String msg){
        resultDto resultDto =new resultDto();
        resultDto.setMessage(msg);
        resultDto.setResultCode(1);
        return resultDto;

    }

    public static  <T> resultDto<T> sucess(String msg,T t){
        // <T> resultDto<T> 正确的返回
        //  resultDto<T> 报错
        resultDto<T> resultDto = new resultDto<>();
        resultDto.setResultCode(1);
        resultDto.setMessage(msg);
        resultDto.setData(t);

        return resultDto;
    }


    //状态为失败  重载  函数name一致 但是参数不一样 调用的时候会区别的


    public static resultDto fail(String msg){
        resultDto resultDto =new resultDto();
        resultDto.setMessage(msg);
        resultDto.setResultCode(0);
        return resultDto;

    }

    public static  <T> resultDto<T> fail (String msg,T t){
        // <T> resultDto<T> 正确的返回
        //  resultDto<T> 报错
        resultDto<T> resultDto = new resultDto<>();
        resultDto.setResultCode(1);
        resultDto.setMessage(msg);
        resultDto.setData(t);
        return resultDto;
    }
}

调用接口如下


    @PostMapping(value = "addQuestionResult")
    public resultDto addQuestionResult(@RequestBody questionDto questionDto) {
        if (questionDto.getQuestionName().contains("  ")) {
            myException.throwMyEx("questionName is not correct");
        }
        //现在去直接抛出异常
        if (questionDto.getQuestionName().contains("errorNULL")) {
            myException demo = new myException("包含null", new NullPointerException());
        }
        System.out.println(questionDto.getQuestionName() + " " + questionDto.getBook());
        return resultDto.sucess("post over\n"
                +questionDto.getQuestionName() +"\n"
                +questionDto.getQuestionType());
    }

postman


图片.png

由于没有上传具体的Dto对象 所以data 为null

 @PostMapping(value = "addQuestionResult")
    public resultDto addQuestionResult(@RequestBody questionDto questionDto) {
        if (questionDto.getQuestionName().contains("  ")) {
            myException.throwMyEx("questionName is not correct");
        }
        //现在去直接抛出异常
        if (questionDto.getQuestionName().contains("errorNULL")) {
            myException demo = new myException("包含null", new NullPointerException());
        }
        System.out.println(questionDto.getQuestionName() + " " + questionDto.getBook());
//        return resultDto.sucess("post over\n"
//                +questionDto.getQuestionName() +"\n"
//                +questionDto.getQuestionType());
        return resultDto.sucess("post over",questionDto);
    }

postman 结果


图片.png

此时考虑到正常的接口响应是resultDto 那异常的时候就可以不像之前那样打印信息了, 可以也返回一个json文件

package com.example.questionlist2.common;


import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.ResponseStatus;

@ControllerAdvice  //标识这个类是一个全局异常处理的类   定义在类上
@ResponseBody  //在相应体中使用
public class myglobalExceptionHandle {

    //异常分为:业务异常和其他异常
    //业务异常
    @ExceptionHandler({myException.class})
    //统一处理value对应的异常,
    // 如果这个类的子类和父类都被声明时  先子后父的顺序捕获
    @ResponseStatus(value = HttpStatus.BAD_REQUEST)
    public resultDto serviceExphandle(myException myException){
        return commontip(myException);
    }


    //其他异常
    @ResponseStatus(value=HttpStatus.BAD_GATEWAY)
    @ExceptionHandler({Exception.class})
    public resultDto othersExphandle(Exception e){
        return commontip(e);
    }

    //系统异常
    @ResponseStatus(HttpStatus.SERVICE_UNAVAILABLE)
    @ExceptionHandler({Throwable.class})
    public resultDto systemExphandle(Throwable t){
        return commontip( t);
    }
    //发现 return的结果可以再放入一个函数中
    public resultDto commontip(Throwable t){
        String tip="请稍后查看具体原因";
        if (t instanceof myException){
            return resultDto.fail(t.getMessage()+": 业务异常",t);
        }
        if (t instanceof Exception){
            return resultDto.fail(t.getMessage()+": 其他异常",t);
        }
        if (t instanceof Throwable){
            return resultDto.fail(t.getMessage()+": 系统异常",t);

        }
        return resultDto.sucess("no Exception");
    }

}

请求 http://localhost:8888/addQuestionResult
{
"questionType":"questionType1",
"keyword":"keyword1",
"questionName":"dedede. ",
"dependOnQuestion":"dependOnQuestion2",
"book":"book1"
}
此时的结果竟然是

{
    "resultCode": 1,
    "message": "questionName is not correct: 业务异常",
    "data": {
        "cause": null,
        "stackTrace": [
            {
                "methodName": "throwMyEx",
                "fileName": "myException.java",
                "lineNumber": 40,
                "className": "com.example.questionlist2.common.myException",
                "nativeMethod": false
            },
            {
                "methodName": "addQuestionResult",
                "fileName": "getListController.java",
                "lineNumber": 106,
                "className": "com.example.questionlist2.cotroller.getListController",
                "nativeMethod": false
            },
            {
                "methodName": "invoke0",
                "fileName": "NativeMethodAccessorImpl.java",
                "lineNumber": -2,
                "className": "sun.reflect.NativeMethodAccessorImpl",
                "nativeMethod": true
            },
            {
                "methodName": "invoke",
                "fileName": "NativeMethodAccessorImpl.java",
                "lineNumber": 62,
                "className": "sun.reflect.NativeMethodAccessorImpl",
                "nativeMethod": false
            },
            {
                "methodName": "invoke",
                "fileName": "DelegatingMethodAccessorImpl.java",
                "lineNumber": 43,
                "className": "sun.reflect.DelegatingMethodAccessorImpl",
                "nativeMethod": false
            },
            {
                "methodName": "invoke",
                "fileName": "Method.java",
                "lineNumber": 498,
                "className": "java.lang.reflect.Method",
                "nativeMethod": false
            },
            {
                "methodName": "doInvoke",
                "fileName": "InvocableHandlerMethod.java",
                "lineNumber": 205,
                "className": "org.springframework.web.method.support.InvocableHandlerMethod",
                "nativeMethod": false
            },
            {
                "methodName": "invokeForRequest",
                "fileName": "InvocableHandlerMethod.java",
                "lineNumber": 150,
                "className": "org.springframework.web.method.support.InvocableHandlerMethod",
                "nativeMethod": false
            },
            {
                "methodName": "invokeAndHandle",
                "fileName": "ServletInvocableHandlerMethod.java",
                "lineNumber": 117,
                "className": "org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod",
                "nativeMethod": false
            },
            {
                "methodName": "invokeHandlerMethod",
                "fileName": "RequestMappingHandlerAdapter.java",
                "lineNumber": 895,
                "className": "org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter",
                "nativeMethod": false
            },
            {
                "methodName": "handleInternal",
                "fileName": "RequestMappingHandlerAdapter.java",
                "lineNumber": 808,
                "className": "org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter",
                "nativeMethod": false
            },
            {
                "methodName": "handle",
                "fileName": "AbstractHandlerMethodAdapter.java",
                "lineNumber": 87,
                "className": "org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter",
                "nativeMethod": false
            },
            {
                "methodName": "doDispatch",
                "fileName": "DispatcherServlet.java",
                "lineNumber": 1067,
                "className": "org.springframework.web.servlet.DispatcherServlet",
                "nativeMethod": false
            },
            {
                "methodName": "doService",
                "fileName": "DispatcherServlet.java",
                "lineNumber": 963,
                "className": "org.springframework.web.servlet.DispatcherServlet",
                "nativeMethod": false
            },
            {
                "methodName": "processRequest",
                "fileName": "FrameworkServlet.java",
                "lineNumber": 1006,
                "className": "org.springframework.web.servlet.FrameworkServlet",
                "nativeMethod": false
            },
            {
                "methodName": "doPost",
                "fileName": "FrameworkServlet.java",
                "lineNumber": 909,
                "className": "org.springframework.web.servlet.FrameworkServlet",
                "nativeMethod": false
            },
            {
                "methodName": "service",
                "fileName": "HttpServlet.java",
                "lineNumber": 681,
                "className": "javax.servlet.http.HttpServlet",
                "nativeMethod": false
            },
            {
                "methodName": "service",
                "fileName": "FrameworkServlet.java",
                "lineNumber": 883,
                "className": "org.springframework.web.servlet.FrameworkServlet",
                "nativeMethod": false
            },
            {
                "methodName": "service",
                "fileName": "HttpServlet.java",
                "lineNumber": 764,
                "className": "javax.servlet.http.HttpServlet",
                "nativeMethod": false
            },
            {
                "methodName": "internalDoFilter",
                "fileName": "ApplicationFilterChain.java",
                "lineNumber": 227,
                "className": "org.apache.catalina.core.ApplicationFilterChain",
                "nativeMethod": false
            },
            {
                "methodName": "doFilter",
                "fileName": "ApplicationFilterChain.java",
                "lineNumber": 162,
                "className": "org.apache.catalina.core.ApplicationFilterChain",
                "nativeMethod": false
            },
            {
                "methodName": "doFilter",
                "fileName": "WsFilter.java",
                "lineNumber": 53,
                "className": "org.apache.tomcat.websocket.server.WsFilter",
                "nativeMethod": false
            },
            {
                "methodName": "internalDoFilter",
                "fileName": "ApplicationFilterChain.java",
                "lineNumber": 189,
                "className": "org.apache.catalina.core.ApplicationFilterChain",
                "nativeMethod": false
            },
            {
                "methodName": "doFilter",
                "fileName": "ApplicationFilterChain.java",
                "lineNumber": 162,
                "className": "org.apache.catalina.core.ApplicationFilterChain",
                "nativeMethod": false
            },
            {
                "methodName": "doFilterInternal",
                "fileName": "CharacterEncodingFilter.java",
                "lineNumber": 201,
                "className": "org.springframework.web.filter.CharacterEncodingFilter",
                "nativeMethod": false
            },
            {
                "methodName": "doFilter",
                "fileName": "OncePerRequestFilter.java",
                "lineNumber": 117,
                "className": "org.springframework.web.filter.OncePerRequestFilter",
                "nativeMethod": false
            },
            {
                "methodName": "internalDoFilter",
                "fileName": "ApplicationFilterChain.java",
                "lineNumber": 189,
                "className": "org.apache.catalina.core.ApplicationFilterChain",
                "nativeMethod": false
            },
            {
                "methodName": "doFilter",
                "fileName": "ApplicationFilterChain.java",
                "lineNumber": 162,
                "className": "org.apache.catalina.core.ApplicationFilterChain",
                "nativeMethod": false
            },
            {
                "methodName": "invoke",
                "fileName": "StandardWrapperValve.java",
                "lineNumber": 197,
                "className": "org.apache.catalina.core.StandardWrapperValve",
                "nativeMethod": false
            },
            {
                "methodName": "invoke",
                "fileName": "StandardContextValve.java",
                "lineNumber": 97,
                "className": "org.apache.catalina.core.StandardContextValve",
                "nativeMethod": false
            },
            {
                "methodName": "invoke",
                "fileName": "AuthenticatorBase.java",
                "lineNumber": 540,
                "className": "org.apache.catalina.authenticator.AuthenticatorBase",
                "nativeMethod": false
            },
            {
                "methodName": "invoke",
                "fileName": "StandardHostValve.java",
                "lineNumber": 135,
                "className": "org.apache.catalina.core.StandardHostValve",
                "nativeMethod": false
            },
            {
                "methodName": "invoke",
                "fileName": "ErrorReportValve.java",
                "lineNumber": 92,
                "className": "org.apache.catalina.valves.ErrorReportValve",
                "nativeMethod": false
            },
            {
                "methodName": "invoke",
                "fileName": "StandardEngineValve.java",
                "lineNumber": 78,
                "className": "org.apache.catalina.core.StandardEngineValve",
                "nativeMethod": false
            },
            {
                "methodName": "service",
                "fileName": "CoyoteAdapter.java",
                "lineNumber": 357,
                "className": "org.apache.catalina.connector.CoyoteAdapter",
                "nativeMethod": false
            },
            {
                "methodName": "service",
                "fileName": "Http11Processor.java",
                "lineNumber": 382,
                "className": "org.apache.coyote.http11.Http11Processor",
                "nativeMethod": false
            },
            {
                "methodName": "process",
                "fileName": "AbstractProcessorLight.java",
                "lineNumber": 65,
                "className": "org.apache.coyote.AbstractProcessorLight",
                "nativeMethod": false
            },
            {
                "methodName": "process",
                "fileName": "AbstractProtocol.java",
                "lineNumber": 895,
                "className": "org.apache.coyote.AbstractProtocol$ConnectionHandler",
                "nativeMethod": false
            },
            {
                "methodName": "doRun",
                "fileName": "NioEndpoint.java",
                "lineNumber": 1732,
                "className": "org.apache.tomcat.util.net.NioEndpoint$SocketProcessor",
                "nativeMethod": false
            },
            {
                "methodName": "run",
                "fileName": "SocketProcessorBase.java",
                "lineNumber": 49,
                "className": "org.apache.tomcat.util.net.SocketProcessorBase",
                "nativeMethod": false
            },
            {
                "methodName": "runWorker",
                "fileName": "ThreadPoolExecutor.java",
                "lineNumber": 1191,
                "className": "org.apache.tomcat.util.threads.ThreadPoolExecutor",
                "nativeMethod": false
            },
            {
                "methodName": "run",
                "fileName": "ThreadPoolExecutor.java",
                "lineNumber": 659,
                "className": "org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker",
                "nativeMethod": false
            },
            {
                "methodName": "run",
                "fileName": "TaskThread.java",
                "lineNumber": 61,
                "className": "org.apache.tomcat.util.threads.TaskThread$WrappingRunnable",
                "nativeMethod": false
            },
            {
                "methodName": "run",
                "fileName": "Thread.java",
                "lineNumber": 748,
                "className": "java.lang.Thread",
                "nativeMethod": false
            }
        ],
        "message": "questionName is not correct",
        "localizedMessage": "questionName is not correct",
        "suppressed": []
    }
}

分页展示list

每页数量
页码
总记录数

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,367评论 6 512
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,959评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,750评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,226评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,252评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,975评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,592评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,497评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,027评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,147评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,274评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,953评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,623评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,143评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,260评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,607评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,271评论 2 358

推荐阅读更多精彩内容