zoukankan      html  css  js  c++  java
  • SpringMVC4返回json

    前言

         目前前后端分离后,接口大多数返回给前端的都是json数据,那么我尝试用SpringMVC4的Controller返回json。demo过程中遇到了几个问题写出来和java初学者分享一下。

    开发环境

        idea2016、jdk1.8、tomcat7

        SpringMVC4、jackson2.5

    开发问题

        1、SpringMVC4如果想返回json的话可以使用ResponseBody、ResponseEntity注解,如果你打算返回注解而没有引用json处理jar包,访问http://localhost:8080/rest/users时会提示http 406。

        2、SpringMVC4版本后json序列化必须使用jackson相关,jackson-annotations-2.5.0.jar,jackson-core-2.5.0.jar,jackson-databind-2.5.0.jar。我开始用的fastjson但会报错:

           Java.lang.NoClassDefFoundError: com/fasterxml/jackson/core/JsonProcessingException

     

    项目配置文件

        初学Spring,配置文件是最烦神的,概括看来首先下载jar包,你需要关注pom.xml、其次是web.xml、spring-mvc.xml。

    1、pom.xml

     <dependencies>
        <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>3.8.1</version>
          <scope>test</scope>
        </dependency>
    
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-core</artifactId>
          <version>${spring.version}</version>
        </dependency>
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-web</artifactId>
          <version>${spring.version}</version>
        </dependency>
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-webmvc</artifactId>
          <version>${spring.version}</version>
        </dependency>
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-oxm</artifactId>
          <version>${spring.version}</version>
        </dependency>
    
        <dependency>
          <groupId>com.alibaba</groupId>
          <artifactId>fastjson</artifactId>
          <version>1.2.12</version>
        </dependency>
        <dependency>
          <groupId>com.fasterxml.jackson.core</groupId>
          <artifactId>jackson-core</artifactId>
          <version>2.5.0</version>
        </dependency>
        <dependency>
          <groupId>com.fasterxml.jackson.core</groupId>
          <artifactId>jackson-annotations</artifactId>
          <version>2.5.0</version>
        </dependency>
        <dependency>
          <groupId>com.fasterxml.jackson.core</groupId>
          <artifactId>jackson-databind</artifactId>
          <version>2.5.0</version>
        </dependency>
       
      </dependencies>
    

    2、web.xml

    <web-app>
      <display-name>Archetype Created Web Application</display-name>
    
      <!-- Spring监听 -->
      <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
      </listener>
    
    
      <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:applicationContext.xml</param-value>
      </context-param>
    
      <servlet>
        <servlet-name>MVC</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
          <param-name>contextConfigLocation</param-name>
          <param-value>classpath:spring-mvc.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
      </servlet>
      <servlet-mapping>
        <servlet-name>MVC</servlet-name>
        <url-pattern>/</url-pattern>
      </servlet-mapping>
    
    
    </web-app>
    

    3、spring-mvc.xml

    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:mvc="http://www.springframework.org/schema/mvc"
           xmlns:beans="http://www.springframework.org/schema/beans"
           xmlns:context="http://www.springframework.org/schema/context"
           xsi:schemaLocation="
           http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans.xsd
           http://www.springframework.org/schema/mvc
           http://www.springframework.org/schema/mvc/spring-mvc.xsd
           http://www.springframework.org/schema/context
           http://www.springframework.org/schema/context/spring-context.xsd">
        <!-- 注解驱动 -->
        <mvc:annotation-driven />
    
        <!-- 扫描包 -->
        <context:component-scan base-package="com.autohome.controller" />
    
        <!-- 视图解析 -->
        <bean class="org.springframework.web.servlet.view.UrlBasedViewResolver">
            <!-- 返回的视图模型数据需要经过jstl来处理 -->
            <property name="viewClass"
                      value="org.springframework.web.servlet.view.JstlView" />
            <property name="prefix" value="/WEB-INF/views/" />
            <property name="suffix" value=".jsp" />
        </bean>
    
        <bean id="stringConverter"
              class="org.springframework.http.converter.StringHttpMessageConverter">
            <property name="supportedMediaTypes">
                <list>
                    <value>text/plain;charset=UTF-8</value>
                </list>
            </property>
        </bean>
        <bean id="jsonConverter"
              class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"></bean>
        <bean
                class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
            <property name="messageConverters">
                <list>
                    <ref bean="stringConverter" />
                    <ref bean="jsonConverter" />
                </list>
            </property>
        </bean>
    
    </beans>
    

         OK, 可以编写rest controller了。

    @Controller
    @RequestMapping("/rest")
    public class RestController {
    
        @RequestMapping(value="/sayHello",method = RequestMethod.GET)
        public @ResponseBody
        String sayHello(){
            return "{"returncode":0,"message":"hello world"}";
        }
    
        @RequestMapping(value="/users")
        public ResponseEntity<List<User>> listAllUser(){
            List<User> list =new ArrayList<User>();
    
            User user =new User();
            user.setId(1);
            user.setName("test");
            user.setAge(30);
    
            User user2 =new User();
            user2.setId(2);
            user2.setName("test1");
            user2.setAge(30);
    
            list.add(user);
            list.add(user2);
    
            return new ResponseEntity<List<User>>(list, HttpStatus.OK);
        }
    
        @RequestMapping(value="/user/{id}",method = RequestMethod.GET)
        public ResponseEntity<User> getUser(@PathVariable long id){
            System.out.println("id:"+id);
    
            User user =new User();
            user.setId(1);
            user.setName("test");
            user.setAge(30);
    
            return new ResponseEntity<User>(user,HttpStatus.OK);
        }
    
    }
    

      

       输入http://localhost:8080/rest/users、http://localhost:8080/rest/user/1/  ,第一个SpringMVC demo搞定。

  • 相关阅读:
    win10使用4G 模块RNDIS模式上网
    转]GSM模块信号强度CSQ与RSSI的对应关系
    /etc/inittab文件详解
    网口扫盲一:网卡初步认识
    网口扫盲二:Mac与Phy组成原理的简单分析
    网口扫盲三:以太网芯片MAC和PHY的关系
    【 MAKEFILE 编程基础之四】详解MAKEFILE 函数的语法与使用!
    【 MAKEFILE 编程基础之三】详解 MAKEFILE 变量的定义规则使用!
    转载:基于jquery的bootstrap在线文本编辑器插件Summernote
    HTML特殊符号对照表、常用的字符实体
  • 原文地址:https://www.cnblogs.com/sword-successful/p/6402562.html
Copyright © 2011-2022 走看看