精华内容
下载资源
问答
  • SpringBoot统一响应体解决方案

    千次阅读 2019-07-18 08:04:17
    SpringBoot中基于控制器增强实现的统一响应体解决方案,低侵入性,可基于这个方案自行拓展

    前言

    最近在优化自己之前基于Spring AOP的统一响应体的实现方案。

    什么是统一响应体呢?在目前的前后端分离架构下,后端主要是一个RESTful API的数据接口。

    但是HTTP的状态码数量有限,而随着业务的增长,HTTP状态码无法很好地表示业务中遇到的异常情况。

    那么可以通过修改响应返回的JSON数据,让其带上一些固有的字段,例如以下这样的

    {
    	"code": 10000,
    	"msg": "success",
    	"data": {
    		"id": 2,
    		"name": "test"
    	}
    }
    

    其中关键属性的用途如下:

    • code为返回结果的状态码
    • msg为返回结果的消息
    • data为返回的业务数据

    3个属性为固有属性,每次响应结果都会有带有它们。

    需求

    希望实现一个能够代替基于AOP的实现方案,需要满足以下几点:

    1. 原有的基于AOP的实现方案需要Controller的返回类型为Object,需要新方案不限制返回类型
    2. 原有的基于AOP的实现方案需要通过切面表达式+注解控制切点的Controller(注解的包名修改会导致切面表达式的修改,即需要修改两处地方),需要新方案能够基于注解,而不需要修改切面表达式

    方案思路

    基于上述的需求,选择使用SpringController增强机制,其中关键的类为以下3个:

    • @ControllerAdvice:类注解,用于指定Controller增强处理器类。
    • ResponseBodyAdvice:接口,实现后beforeBodyWrite()方法后可以对响应的body进行修改,需要结合@ControllerAdvice使用。
    • @ExceptionHandler:方法注解,用于指定异常处理方法,需要结合@ControllerAdvice@ResponseBody使用。

    示例关键代码

    本示例使用的Spring Boot版本为2.1.6.RELEASE,同时需要开发工具安装lombok插件

    引入依赖

        <dependencies>
            <!--web-starter-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
    
            <!--lombok-->
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <optional>true</optional>
            </dependency>
    
            <!--test-starter-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
        </dependencies>
    

    统一响应体

    Controller增强后统一响应体对应的对象

    import lombok.AllArgsConstructor;
    import lombok.Data;
    
    import java.io.Serializable;
    
    /**
     * 统一的公共响应体
     * @author NULL
     * @date 2019-07-16
     */
    @Data
    @AllArgsConstructor
    public class ResponseResult implements Serializable {
        /**
         * 返回状态码
         */
        private Integer code;
        /**
         * 返回信息
         */
        private String msg;
        /**
         * 数据
         */
        private Object data;
    
    }
    

    统一响应注解

    统一响应注解是一个标记是否开启统一响应增强的注解

    import java.lang.annotation.ElementType;
    import java.lang.annotation.Retention;
    import java.lang.annotation.RetentionPolicy;
    import java.lang.annotation.Target;
    
    /**
     * 统一响应注解<br/>
     * 添加注解后,统一响应体才能生效
     * @author NULL
     * @date 2019-07-16
     */
    @Retention(RetentionPolicy.RUNTIME)
    @Target({ElementType.METHOD, ElementType.TYPE})
    public @interface BaseResponse {
    
    }
    

    状态码枚举

    统一响应体中返回的状态码code和状态信息msg对应的枚举类

    /**
     * 返回状态码
     *
     * @author NULL
     * @date 2019-07-16
     */
    public enum ResponseCode {
        /**
         * 成功返回的状态码
         */
        SUCCESS(10000, "success"),
        /**
         * 资源不存在的状态码
         */
        RESOURCES_NOT_EXIST(10001, "资源不存在"),
        /**
         * 所有无法识别的异常默认的返回状态码
         */
        SERVICE_ERROR(50000, "服务器异常");
        /**
         * 状态码
         */
        private int code;
        /**
         * 返回信息
         */
        private String msg;
    
        ResponseCode(int code, String msg) {
            this.code = code;
            this.msg = msg;
        }
    
        public int getCode() {
            return code;
        }
    
        public String getMsg() {
            return msg;
        }
    }
    

    业务异常类

    业务异常类是用于识别业务相关的异常,需要注意这个异常类强制需要以ResponseCode作为构造方法入参,这样可以通过捕获异常获得返回的状态码信息

    import com.rjh.web.response.ResponseCode;
    import lombok.Data;
    import lombok.EqualsAndHashCode;
    
    /**
     * 业务异常类,继承运行时异常,确保事务正常回滚
     *
     * @author NULL
     * @since  2019-07-16
     */
    @Data
    @EqualsAndHashCode(callSuper = false)
    public class BaseException extends RuntimeException{
    
        private ResponseCode code;
    
        public BaseException(ResponseCode code) {
            this.code = code;
        }
    
        public BaseException(Throwable cause, ResponseCode code) {
            super(cause);
            this.code = code;
        }
    }
    

    异常处理类

    用于处理Controller运行时未捕获的异常的处理类。

    import com.rjh.web.exception.BaseException;
    import lombok.extern.slf4j.Slf4j;
    import org.springframework.web.bind.annotation.ControllerAdvice;
    import org.springframework.web.bind.annotation.ExceptionHandler;
    import org.springframework.web.bind.annotation.ResponseBody;
    
    /**
     * 异常处理器
     *
     * @author NULL
     * @since  2019-07-16
     */
    @ControllerAdvice(annotations = BaseResponse.class)
    @ResponseBody
    @Slf4j
    public class ExceptionHandlerAdvice {
        /**
         * 处理未捕获的Exception
         * @param e 异常
         * @return 统一响应体
         */
        @ExceptionHandler(Exception.class)
        public ResponseResult handleException(Exception e){
            log.error(e.getMessage(),e);
            return new ResponseResult(ResponseCode.SERVICE_ERROR.getCode(),ResponseCode.SERVICE_ERROR.getMsg(),null);
        }
    
        /**
         * 处理未捕获的RuntimeException
         * @param e 运行时异常
         * @return 统一响应体
         */
        @ExceptionHandler(RuntimeException.class)
        public ResponseResult handleRuntimeException(RuntimeException e){
            log.error(e.getMessage(),e);
            return new ResponseResult(ResponseCode.SERVICE_ERROR.getCode(),ResponseCode.SERVICE_ERROR.getMsg(),null);
        }
    
        /**
         * 处理业务异常BaseException
         * @param e 业务异常
         * @return 统一响应体
         */
        @ExceptionHandler(BaseException.class)
        public ResponseResult handleBaseException(BaseException e){
            log.error(e.getMessage(),e);
            ResponseCode code=e.getCode();
            return new ResponseResult(code.getCode(),code.getMsg(),null);
        }
    }
    

    响应增强类

    Conrtoller增强的统一响应体处理类,需要注意异常处理类已经进行了增强,所以需要判断一下返回的对象是否为统一响应体对象。

    import lombok.extern.slf4j.Slf4j;
    import org.springframework.core.MethodParameter;
    import org.springframework.http.MediaType;
    import org.springframework.http.server.ServerHttpRequest;
    import org.springframework.http.server.ServerHttpResponse;
    import org.springframework.web.bind.annotation.ControllerAdvice;
    import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice;
    
    /**
     * 统一响应体处理器
     * @author NULL
     * @date 2019-07-16
     */
    @ControllerAdvice(annotations = BaseResponse.class)
    @Slf4j
    public class ResponseResultHandlerAdvice implements ResponseBodyAdvice {
    
        @Override
        public boolean supports(MethodParameter returnType, Class converterType) {
            log.info("returnType:"+returnType);
            log.info("converterType:"+converterType);
            return true;
        }
    
        @Override
        public Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType, Class selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) {
            if(MediaType.APPLICATION_JSON.equals(selectedContentType) || MediaType.APPLICATION_JSON_UTF8.equals(selectedContentType)){ // 判断响应的Content-Type为JSON格式的body
                if(body instanceof ResponseResult){ // 如果响应返回的对象为统一响应体,则直接返回body
                    return body;
                }else{
                    // 只有正常返回的结果才会进入这个判断流程,所以返回正常成功的状态码
                    ResponseResult responseResult =new ResponseResult(ResponseCode.SUCCESS.getCode(),ResponseCode.SUCCESS.getMsg(),body);
                    return responseResult;
                }
            }
            // 非JSON格式body直接返回即可
            return body;
        }
    }
    

    使用示例

    首先准备一个User对象

    import lombok.Data;
    import lombok.EqualsAndHashCode;
    
    import java.io.Serializable;
    
    /**
     * 用户类
     * @author NULL
     * @date 2019-07-16
     */
    @Data
    @EqualsAndHashCode
    public class User implements Serializable {
    
        private Integer id;
    
        private String name;
        
    }
    

    然后是准备一个简单的UserController即可

    import com.rjh.web.entity.User;
    import com.rjh.web.exception.BaseException;
    import com.rjh.web.response.BaseResponse;
    import com.rjh.web.response.ResponseCode;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.PathVariable;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    /**
     * 测试用的Controller
     *
     * @author NULL
     * @date 2019-07-16
     */
    @BaseResponse
    @RestController
    @RequestMapping("users")
    public class UserController {
    
        @GetMapping("/{userId}")
        public User getUserById(@PathVariable Integer userId){
            if(userId.equals(0)){
                throw new BaseException(ResponseCode.RESOURCES_NOT_EXIST);
            }
            if(userId.equals(1)){
                throw new RuntimeException();
            }
            User user=new User();
            user.setId(userId);
            user.setName("test");
            return user;
        }
        
    }
    

    运行结果

    1. 在浏览器直接访问http://127.0.0.1:8080/users/0,则返回结果如下(结果经过格式化处理):
      {
      	"code": 10001,
      	"msg": "资源不存在",
      	"data": null
      }
      
    2. 在浏览器直接访问http://127.0.0.1:8080/users/1,则返回结果如下(结果经过格式化处理):
      {
      	"code": 50000,
      	"msg": "服务器异常",
      	"data": null
      }
      
    3. 在浏览器直接访问http://127.0.0.1:8080/users/2,则返回结果如下(结果经过格式化处理):
      {
      	"code": 10000,
      	"msg": "success",
      	"data": {
      		"id": 2,
      		"name": "test"
      	}
      }
      

    由运行结果可以得知统一响应增强其实已经生效了,而且能够很好的处理异常。

    示例代码地址

    下面是这个示例的代码地址,如果觉得不错或者帮助到你,希望大家给个Star
    https://github.com/spring-based-solutions/spring-web-unified-response-demo

    参考资料

    1. https://docs.spring.io/spring/docs/5.1.8.RELEASE/spring-framework-reference/web.html#mvc-ann-controller-advice
    2. https://docs.spring.io/spring/docs/5.1.8.RELEASE/spring-framework-reference/web.html#mvc-ann-exceptionhandler
    展开全文
  • 需求场景 ... 例如:一个错误信息的响应...return 响应体, 状态码, 响应头 等价于 return (响应体, 状态码, 响应头) return 可以返回一个元组,这样的元组必须是 (response, status, headers) 的形式,且至少包含一个元

    需求场景

    在api设计中,基于restful的设计原则,一个http的响应应该包含执行的响应信息以及状态码。

    例如:一个错误信息的响应信息应该包含内容以及返回对应的设计错误码。

    在flask中如何制定这个的响应信息呢?下面来看看。

    使用return直接设置特定的响应信息

    return 响应体, 状态码, 响应头
    等价于
    return (响应体, 状态码, 响应头)

    return 可以返回一个元组,这样的元组必须是 (response, status, headers) 的形式,且至少包含一个元素。 status 值会覆盖状态代码, headers 可以是一个列表或字典,作为额外的消息标头值。

    下面写个示例视图函数如下:

    from flask import Flask, request, abort
     
    # 实例化app
    app = Flask(import_name=__name__)
     
    @app.route('/login', methods=["GET","POST"])
    def login():
     
        # return 响应体, 状态码, 响应头
        return "login fail", 404, [("token", "123456"), ("City", "shenzhen")] # 使用元组的方式设置header
     
    if __name__ == '__main__':
        app.run(debug=True)

    使用浏览器请求如下:

    13423234-4eceb686e6dd73c1.png

    return "login fail", 404, [("token", "123456"), ("City", "shenzhen")] 
    

    可以看到上面设置响应消息成功返回。

    • status 值可以设置任意的状态代码,headers可以是字典
    from flask import Flask, request, abort
     
    # 实例化app
    app = Flask(import_name=__name__)
     
    @app.route('/login', methods=["GET","POST"])
    def login():
     
        # return 响应体, 状态码, 响应头
        # return "login fail", 404, [("token", "123456"), ("City", "shenzhen")] # 使用元组的方式设置header
        return "login fail", "666 hello wolrd", {"token":"123456", "City": "shenzhen"} # 使用元组的方式设置header
     
    if __name__ == '__main__':
        app.run(debug=True)

    使用浏览器请求如下:

    13423234-910bafc295d0de6d.png

    • 响应消息元组 (response, status, headers) 至少包含一个元素
    from flask import Flask, request, abort
     
    # 实例化app
    app = Flask(import_name=__name__)
     
    @app.route('/login', methods=["GET","POST"])
    def login():
     
        # return 响应体, 状态码, 响应头
        # return "login fail", 404, [("token", "123456"), ("City", "shenzhen")] # 使用元组的方式设置header
        # return "login fail", "666 hello wolrd", {"token":"123456", "City": "shenzhen"} # 使用元组的方式设置header
        return "login fail", "999 hello wolrd"
     
    if __name__ == '__main__':
        app.run(debug=True)

    使用浏览器请求如下:

    13423234-aabcc302dd65f903.png

    可以看到只要至少有一项作为响应消息即可。

    除了return的方式返回特性的响应消息,还可以使用另一种方式。

    使用make_response设置特定的响应信息

    导入make_response

    from flask import make_response
    

    示例代码如下:

    from flask import Flask, request, abort, make_response
     
    # 实例化app
    app = Flask(import_name=__name__)
     
    @app.route('/login', methods=["GET","POST"])
    def login():
     
        res = make_response("login fail") # 设置响应体
        res.status = '999 login fail' # 设置状态码
        res.headers['token'] = "123456" # 设置响应头
        res.headers['City'] = "shenzhen" # 设置响应头
     
        return res
     
    if __name__ == '__main__':
        app.run(debug=True)

    在浏览器执行如下:

    13423234-2bce353b5626df46.png

     

     

    展开全文
  • 需求场景 ... 例如:一个错误信息的响应信息应该包含内容以及返回对应的设计错误码。 在flask中如何制定这个的响应信息呢?...return 响应体, 状态码, 响应头 等价于 return (响应体, 状态码, 响应头) return ...
        

    需求场景

    在api设计中,基于restful的设计原则,一个http的响应应该包含执行的响应信息以及状态码。

    例如:一个错误信息的响应信息应该包含内容以及返回对应的设计错误码。

    在flask中如何制定这个的响应信息呢?下面来看看。

    使用return直接设置特定的响应信息

    return 响应体, 状态码, 响应头
    等价于
    return (响应体, 状态码, 响应头)
    

    return 可以返回一个元组,这样的元组必须是 (response, status, headers) 的形式,且至少包含一个元素。 status 值会覆盖状态代码, headers 可以是一个列表或字典,作为额外的消息标头值。

    下面写个示例视图函数如下:

    from flask import Flask, request, abort
    
    # 实例化app
    app = Flask(import_name=__name__)
    
    @app.route('/login', methods=["GET","POST"])
    def login():
    
        # return 响应体, 状态码, 响应头
        return "login fail", 404, [("token", "123456"), ("City", "shenzhen")] # 使用元组的方式设置header
    
    if __name__ == '__main__':
        app.run(debug=True)
    

    使用浏览器请求如下:

    13423234-4eceb686e6dd73c1.png
    return "login fail", 404, [("token", "123456"), ("City", "shenzhen")] 
    

    可以看到上面设置响应消息成功返回。

    • status 值可以设置任意的状态代码,headers可以是字典
    from flask import Flask, request, abort
    
    # 实例化app
    app = Flask(import_name=__name__)
    
    @app.route('/login', methods=["GET","POST"])
    def login():
    
        # return 响应体, 状态码, 响应头
        # return "login fail", 404, [("token", "123456"), ("City", "shenzhen")] # 使用元组的方式设置header
        return "login fail", "666 hello wolrd", {"token":"123456", "City": "shenzhen"} # 使用元组的方式设置header
    
    if __name__ == '__main__':
        app.run(debug=True)
    

    使用浏览器请求如下:

    13423234-910bafc295d0de6d.png
    • 响应消息元组 (response, status, headers) 至少包含一个元素
    from flask import Flask, request, abort
    
    # 实例化app
    app = Flask(import_name=__name__)
    
    @app.route('/login', methods=["GET","POST"])
    def login():
    
        # return 响应体, 状态码, 响应头
        # return "login fail", 404, [("token", "123456"), ("City", "shenzhen")] # 使用元组的方式设置header
        # return "login fail", "666 hello wolrd", {"token":"123456", "City": "shenzhen"} # 使用元组的方式设置header
        return "login fail", "999 hello wolrd"
    
    if __name__ == '__main__':
        app.run(debug=True)
    

    使用浏览器请求如下:

    13423234-aabcc302dd65f903.png

    可以看到只要至少有一项作为响应消息即可。

    除了return的方式返回特性的响应消息,还可以使用另一种方式。

    使用make_response设置特定的响应信息

    导入make_response

    from flask import make_response
    

    示例代码如下:

    from flask import Flask, request, abort, make_response
    
    # 实例化app
    app = Flask(import_name=__name__)
    
    @app.route('/login', methods=["GET","POST"])
    def login():
    
        res = make_response("login fail") # 设置响应体
        res.status = '999 login fail' # 设置状态码
        res.headers['token'] = "123456" # 设置响应头
        res.headers['City'] = "shenzhen" # 设置响应头
    
        return res
    
    if __name__ == '__main__':
        app.run(debug=True)
    

    在浏览器执行如下:

    13423234-2bce353b5626df46.png
    13423234-0e3934319aa622f6.png
    展开全文
  • response:响应(二)操作响应体

    千次阅读 2018-03-28 10:03:17
    操作响应体: 页面上要展示的内容 常用方法: Writer getWriter():字符流 ServletOutputStream getOutputStream() :字节流 自己写的东西用字符流,其他一概用字节流. 处理响...

    操作响应体:

            页面上要展示的内容
            常用方法:
                Writer getWriter():字符流
                ServletOutputStream getOutputStream() :字节流
                
                自己写的东西用字符流,其他一概用字节流.
                
            处理响应中文乱码:
                方式1:★
                    response.setContentType("text/html;charset=utf-8");
                方式2:理解
                    response.setHeader("content-type", "text/html;charset=utf-8");
        
            注意:
                两个流互斥

                当响应完成之后,服务器会判断一下流是否已经关闭,若没有关闭,服务器会帮我们关闭.(底层使用的缓冲流)

    代码:

    package com.feizhu._response_b_body;

    import java.io.IOException;
    import java.io.PrintWriter;

    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;


    public class PrintServlet extends HttpServlet {
        private static final long serialVersionUID = 1L;

        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            //处理响应的中文乱码
    //        response.setContentType("text/html;charset=utf-8");
            
            response.setHeader("content","text/html;charset=utf-8");
            //打印表格
            //获取字符流
             PrintWriter w=    response.getWriter();
             
             w.print("<table border='1'><tr>");
             w.println("<td>用户名</td>");
             w.println("<td>tom</td></tr>");
             w.println("<tr><td>密码</td>");
             w.println("<td>123</td></tr>");
             w.print("<tr></table>");
        }

        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            
            doGet(request, response);
        }

    }
     

    效果展示

    备注:由于个人原因,本博客暂停更新。如有问题可联系本人,本人提供技术指导、学习方向、学习路线。本人微信wlp1156107728(添加注明来意)   QQ1156107728(添加注明来意)

    展开全文
  • (1)响应体设置文本 PrintWritergetWriter() 获得字符流,通过字符流的write(Strings)方法可以将字符串设置到response 缓冲区中,随后Tomcat会将response缓冲区中的内容组装成Http响应返回给浏览 器端。 ...
  • 获取HttpURLConnection 响应体内容

    千次阅读 2013-08-15 17:58:02
    java 中,有时需要使用HttpURLConnection 模拟浏览器发送http请求,那么如何获取HttpURLConnection 中的响应体呢? private static byte[] connection(HttpURLConnection huc, byte[] sendBytes, String mode) ...
  • ResponseBodyAdvice是spring4.1的新特性,其作用是在响应体写出之前做一些处理;比如,修改返回值、加密等。 我在项目中的用到@ControllerAdvice,ResponseBodyAdvice的目的,是为每个请求的返回json中修改一个属性...
  • 为什么要设计统一响应体 因为系统中默认给我们提供了许多的状态码,比如404,500等。但是HTTP的状态码数量有限,而随着业务的增长,HTTP状态码无法很好地表示业务中遇到的异常情况。 那么可以通过修改响应返回的JSON...
  • HttpResponseMessage获取请求响应体内容

    千次阅读 2019-09-28 02:28:53
    使用httpClient获取的HttpResponseMessage类型的response,直接对其toString()获取的是请求的响应头,并没有获取响应体的内容 解决办法 HttpResponseMessage.Content 属性声明 HTTP 响应的内容。...
  • Spring Cloud Gateway 修改返回的响应体

    千次阅读 2020-11-24 12:04:38
    问题描述: 在gateway中修改返回的响应体,在全局Filter中添加如下代码: import org.springframework.core.Ordered; import org.springframework.cloud.gateway.filter.GlobalFilter; import org.springframework....
  • Restful API返回统一响应体

    万次阅读 2017-03-20 15:45:33
    对于客户端开发或者网站开发而言,调用接口返回有统一的响应体,可以针对性的设计界面,代码结构更加清晰,层次也更加分明。 所以需要调用api时,要求返回结构的数据实体。以下就分享以下我的实现方法; 1、建立统一...
  • 获取nginx响应头、响应体

    千次阅读 2020-07-08 18:29:22
    在原生nginx中无法获取响应相关信息。我们可以在openresty中借助lua来获取这些信息。 worker_processes 1; error_log logs/error.log; events { worker_connections 1024; } http { log_format log_req_resp '$...
  • Flask HttpResponse 响应体中返回 openpyxl 生成的 Excel 文档 现在我需要提供一个链接,访问时通过 openpyxl 动态生成一个 Excel 文档,并作为响应体返回。 在这里将动态生成的 Excel 文档保存到服务器,并重定向到...
  • 使用Fiddler抓包将响应体保存到指定文件 打开Fiddler,用快捷键Ctrl+r打开Fiddler ScriptEditor,搜索OnBeforeResponse,在此方法下加入代码: //过滤无关请求,只关注特定请求 if (oSession.fullUrl.Contains(...
  • NGINX 响应 400 5 没有响应体

    千次阅读 2018-12-22 19:43:38
    使用Postman可以发现没有任何响应内容,并且状态码为400。 检查Nginx的错误日志,发现错误日志为空。 tail -n 100 -f /var/log/nginx/error.log 通过查看访问日志发现 tail -n 100 -f /var/log/nginx/access.log ...
  • ResponseBodyAdvice 拦截Controller方法默认返回参数,统一处理返回值/响应体 1、Controller代码 以下是Controller查询方法源码: /** * controller * * @author yclimb * @date 2018/6/29. */ @...
  • # 优雅的实现spring-cloud-gateway修改请求和响应体 ## 引言 最近公司的微服务越来越多,管理起来比较麻烦,决定引入微服务网关。咨询了百度老师发现Spring Cloud gateway功能已经比较完善,性能也还很不错。决定...
  • ⑥通过response设置响应体 旧 //text package com . itheima . content ; import java . io . IOException ; import java . io . PrintWriter ; import javax . servlet . ServletException ; ...
  • response对象(响应对象) 想要获取客户端的内容,使用request对象。对客户端做出响应使用response对象 响应 响应行 状态码: void setStatus(int sc) 设置状态码 响应头(key:value的形式,1个key1个value/多个...
  • Request Body:请求 HTTP请求报文由3部分组成(请求行+请求头+请求): 下面是一个实际的请求报文: ①是请求方法,HTTP/1.1 定义的请求方法有8种:GET、POST、...
  • PostMan-测试脚本之验证响应体是否包含某个字符串 一、使用场景 接口测试最重要的就是返回数据的检查,一个简单的接口,我们可以肉眼检查返回数据,但接口一旦多起来且复杂,每次的检查都会很费劲,此时我们就需要...
  • http请求体和响应体图解

    千次阅读 2018-08-20 21:19:21

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 302,994
精华内容 121,197
关键字:

响应体