springboot 九-响应结果

2022-02-18  本文已影响0人  小眼睛的露鹿酱

统一响应大对象

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

每页数量
页码
总记录数

上一篇下一篇

猜你喜欢

热点阅读