51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

查看: 412|回复: 0

实现数据交互之Postman

[复制链接]
  • TA的每日心情
    无聊
    4 小时前
  • 签到天数: 919 天

    连续签到: 1 天

    [LV.10]测试总司令

    发表于 2023-5-8 11:22:05 | 显示全部楼层 |阅读模式
    使用Postman实现mvc与Json数据交互
      修改web.xml:
    <!DOCTYPE web-app PUBLIC
            "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
            "http://java.sun.com/dtd/web-app_2_3.dtd" >

    <web-app>
      <display-name>Archetype Created Web Application</display-name>


      <!--  三、编码过滤器-->
      <filter>
        <filter-name>CharacterEncodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
          <param-name>encoding</param-name>
          <param-value>utf-8</param-value>
        </init-param>
      </filter>
      <filter-mapping>
        <filter-name>CharacterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
      </filter-mapping>

      <!--  一、spring mvc-->
      <servlet>
        <servlet-name>app1</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
          <param-name>contextConfigLocation</param-name>
          <param-value>classpath:spring-web.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
      </servlet>

      <servlet-mapping>
        <servlet-name>app1</servlet-name>
        <url-pattern>/</url-pattern>
      </servlet-mapping>
    </web-app>


      加入spring-web.xml:
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:context="http://www.springframework.org/schema/context"
           xmlns:mvc="http://www.springframework.org/schema/mvc"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
            https://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/context
            https://www.springframework.org/schema/context/spring-context.xsd
            http://www.springframework.org/schema/mvc
            https://www.springframework.org/schema/mvc/spring-mvc.xsd">

        <!-- 1.组件扫描-->
        <context:component-scan base-package="com.cc.mvc.**"></context:component-scan>
        <!-- 2、注解适配器和映射器-->
        <mvc:annotation-driven/>
        <!--3、视图解析器-->
        <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
            <property name="prefix" value="/WEB-INF/jsp/"/>
            <property name="suffix" value=".jsp"/>
        </bean>
        <!-- 4、文件上传解析器-->
        <bean id="multipartResolver"
              class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
            <!-- 设置上传文件的最大尺寸为5MB -->
            <property name="maxUploadSize">
                <value>5242880</value>
            </property>
        </bean>

        <!--    5、静态资源映射
                mapping : 客户端浏览器路径  images/1.jpg   images/product/2.jpg
                location: 项目根据路径的下的指定目录下   /WEB-INF/images/1.jpg  /WEB-INF/images/2.jpg
        -->
        <mvc:resources mapping="/images/**" location="/WEB-INF/images/"></mvc:resources>

    </beans>


      建立User实体类:
    public class User {
        private String id;
        @JsonIgnore
        private String name;

        public String getId() {
            return id;
        }

        public void setId(String id) {
            this.id = id;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        @Override
        public String toString() {
            return "User{" +
                    "id='" + id + '\'' +
                    ", name='" + name + '\'' +
                    '}';
        }
    }


      建立一个ResopsonseStatus枚举类,用来传递响应的结果。
    package com.cc.mvc.constants;

    public enum ResopsonseStatus {

        OK("200","请求成功!"),
        AUTHOR_ERROR("1001","接口认证失败"),
        INTENAL_ERROR("1003","程序内部错误"),
        AUTHOR_OUTTIME("1002","认证过期");

        private String code;
        private String msg;

        ResopsonseStatus(String code, String msg) {
            this.code = code;
            this.msg = msg;
        }

        public String getCode() {
            return code;
        }

        public void setCode(String code) {
            this.code = code;
        }

        public String getMsg() {
            return msg;
        }

        public void setMsg(String msg) {
            this.msg = msg;
        }
    }


      建立ServerResponse实体类,用于反回响应后的结果。
    package com.cc.mvc.response;

    import com.cc.mvc.constants.ResopsonseStatus;
    import com.fasterxml.jackson.annotation.JsonIgnore;
    import com.fasterxml.jackson.databind.annotation.JsonSerialize;

    import java.io.Serializable;

    @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL)
    //@JsonInclude(JsonInclude.Include.NON_NULL)
    public class ServerResponse<T> implements Serializable{
        @JsonIgnore
        private String code;/*业务响应嘛*/
        @JsonIgnore
        private String msg;/*相应的信息*/
    //    private Object obj;/*相应的数据,不推荐*/

        private T data;/*相应数据,推荐*/

        private ServerResponse(String code,String msg,T data) {

            this.code=code;
            this.msg=msg;
            this.data=data;

        }
        /*成功的响应*/
        public static ServerResponse ok(Object t){
            return new ServerResponse(ResopsonseStatus.OK.getCode(),ResopsonseStatus.OK.getMsg(),t);
        }
        /*失败的响应,固定错误信息*/
        public static ServerResponse error(Object t){
            return new ServerResponse(ResopsonseStatus.INTENAL_ERROR.getCode(), ResopsonseStatus.INTENAL_ERROR.getMsg(),t);
        }

        /*失败的响应,自定义错误信息*/
        public static ServerResponse errorMsg(String msg){
            return new ServerResponse(ResopsonseStatus.INTENAL_ERROR.getCode(), msg,null);
        }

        public String getCode() {
            return code;
        }

        public void setCode(String code) {
            this.code = code;
        }

        public String getMsg() {
            return msg;
        }

        public void setMsg(String msg) {
            this.msg = msg;
        }

        public T getData() {
            return data;
        }

        public void setData(T data) {
            this.data = data;
        }
    }


      注意:这里@JsonIgnore 是代表着,你需要显示到前端的就不加这个注解,不需要显示到前端的就加上这个注解。
      写Controller测试,这是使用json对象字符串的方式传递过去,我们运行一下,先将Tomcat跑起来。
    @Controller
    public class TestController {

        @Autowired
        private UserService userService;

        @RequestMapping(value = "/test", produces="application/json;charset=UTF-8")
        @ResponseBody
        public String test(HttpServletResponse response){

    //        response.setContentType("application/json;charset=gbk");
            //return "index";
            return "{\"name\":\"二狗子\",\"age\":12,\"sex\":\"男\",\"address\":\"马栏山\"}";
        }
    }


      随后我们将Postman启动,并模拟前端发送请求到后台,获取返回值。

      接下来使用json对象数组的方式传递过去,在Controller加入测试方法:
    @RequestMapping("/json2")
        @ResponseBody  //spring mvc默认采用json序列化框架:fastJson ,Gson  , Jackson框架(默认)
        public User getUser(){
            User user = new User();
            user.setId("2");
            user.setName("二狗子");
            return user;
        }


      在Postman里更改成下面这样,然后访问:

      这个User对象就返回过来了。但是name没返回过来,原因就是在建立User实体类表中加入了@JsonIgnore,所有才只显示了一个id过来,去掉就一起返回了。
      使用Postman模拟前端输入用户ID账号,并返回用户id到前端,在Controller加入测试方法。
    @ResponseBody
        @RequestMapping(value = "/add_user",method = RequestMethod.POST)
        public ServerResponse<User> addUser(@RequestBody User user){

            System.out.println("----进入adduser----"+user);


            return ServerResponse.ok(user);
        }


      使用Postman访问:

      注意这里一定要加上这个Content-Type:


    回复

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-3-29 13:32 , Processed in 0.069137 second(s), 24 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表