欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

3.4 SpringMVC --JSON数据交互和RESTFUL风格接口支持

程序员文章站 2024-02-27 21:20:09
...

1.JSON数据交互:

  JSON数据:在现在前后台分离趋势下,JSON是常用的进行前后台交互的主要数据载体。全称是JavaScript Object Notation。

  在Spring中提供了一个接口(HttpMessageConverter)来实现浏览器与控制器之间的数据交互,**HttpMessageConverter**这个接口可以将请求信息中的数据转换为 T 数据类型,并将转换后的数据绑定到控制器内处理方法的形参中;同时也可以将处理方法返回的消息转换为响应消息返回给浏览器端。

  在实际业务中,会使用HttpMessageConverter 实现类,来完成前后台数据交互的实际需求。SpringMVC中默认使用 MappingJackson2HttpMessageConverter 来处理携带JSON格式数据的请求。MappingJackson2HttpMessageConverter 可以将Java对象转换为JSON或XML,也可以将JSON或XML转换为Java对象。

在Maven管理的项目中引入Jackson包,在pom.xml文件中添加Jackson的三个依赖包:
  jackson-annoations-2.8.8.jar(JSON转换注解包);
  jackson-core-2.8.8.jar (JSON转换核心包);
  jackson-databind-2.8.8.jar(JSON转换的数据绑定包);

demo:

3.4 SpringMVC --JSON数据交互和RESTFUL风格接口支持

本例中用到了两个注解 @RequestBody@ ResponseBody
   @RequestBody: 该注解用在控制器的处理方法的形参上,将请求体中的数据绑定到方法形参中(请求体中的参数Key值要与形参(一般是POJO类的属性)保持一致);
   @ResponseBody:用在方法上,将 return 返回数据 作为JSON数据格式返回给浏览器;

在本例中,用的是 <mvc:annotation-driven /> 来配置JSON转换器的,也可以在Spring配置中 以bean 的方式 进行配置JSON转换器:


…………

   <!--配置处理映射器-->
   <bean class="
         org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping" />
   <!--配置处理适配器-->
   <bean class="
         org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter" />
        <property name="messageConverters">
            <list>
                <!--配置JSON转换器-->
                <bean class="
                    org.springframework.http.converter.json.MappingJackson2HttpMessageConverter" />
            </list>
        </property>
    </bean>
…………

2.关于RESTful:

  就是把请求参数变为请求路径的编程风格

例如一个请求:

http://localhost:8080/userSelect?id=1

变为RESTful风格请求:

http://localhost:8080/userSelect/1

相应地,后台控制器处理方法获取RESTful风格的请求参数:

/**
     *接收RESTful风格的请求,其接收方式为GET
     */
    @RequestMapping(value="/userSelect/{id}",method= RequestMethod.GET)
    @ResponseBody
    public User selectUser(@PathVariable("id") String id){
        //查看数据接收
        System.out.println("id="+id);
        User user=new User();
        //模拟根据id查询出到用户对象数据
        if(id.equals("1234")){
            user.setUsername("tom");
        }
        //返回JSON格式的数据
        return user;
    }