zoukankan      html  css  js  c++  java
  • Spring MVC json配置

    接口类的Controller,一般返回的是json数据,而Spring MVC中默认返回的string,而jsp页面的话,会按配置中自己行匹配转义字符串为对应的jsp文件。

    @Controller
    @RequestMapping("/user")
    public class UserController {
    
    	@RequestMapping(value = "/add", method = RequestMethod.GET)
    	@ResponseBody
    	public User addUser() {
    		User obj = new User();
    		obj.setId("321");
    		obj.setName("test");
    		return obj;
    	}
    }
    

     注意红色部分,@ResponseBody标识返回的是纯内容,如返回值是string的话,浏览器端会得到一个string,而不是去匹配相应的jsp文件。

    我们返回的是json,所以@ResponseBody是必需的。

    然后User是我们要序列化为json的对象,相应的转换由spring利用jackson在框架中进行。

    接着看配置。

    	<!-- 配置自动扫描的包 -->
    	<context:component-scan base-package="com.awu.controllers" />
    	<mvc:annotation-driven/>
    
    	<!-- 配置视图解析器 如何把handler 方法返回值解析为实际的物理视图 -->
    	<bean
    		class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    		<property name="prefix" value="/WEB-INF/views/"></property>
    		<property name="suffix" value=".jsp"></property>
    	</bean>
    

     注意红色部分,当我们有Controller中需要处理json时,添加这个默认配置,如果显示的配置的话,也可以按如下配置。

    <mvc:annotation-driven>
    		<mvc:message-converters>
    			<bean class="org.springframework.http.converter.StringHttpMessageConverter" />
    			<bean
    				class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter" />
    		</mvc:message-converters>
    	</mvc:annotation-driven>
    

    Tip:开始用默认配置一直不对,会报java.lang.IllegalArgumentException: No converter found for return value of type。Stackoverflow上也没办法解决。通过显示配置,控制台输出了异常,才发现是jackson的jar包没有引用完全,开始只用了core,实际需要以下:

    • jackson-core-**.jar
    • jackson-databind-**.jar
    • jackson-annotations-**.jar

    我使用的是2.8.1的core和databind,annotations用的2.8.0。相应下载链接:

    core:  http://repo1.maven.org/maven2/com/fasterxml/jackson/core/jackson-core/

    databind:  http://repo1.maven.org/maven2/com/fasterxml/jackson/core/jackson-databind/

    annotations:  https://github.com/FasterXML/jackson-annotations/wiki

  • 相关阅读:
    ES6 -- (1) 简介、let、块级作用域、const、顶层对象的属性、globalThis对象
    TS -- (5)声明合并、代码检查
    TS -- (4)类、类与接口、泛型
    TS -- (3)声明文件、内置对象、类型别名、字符串字面量类型、元组、枚举
    TS -- (2)接口、数组的类型、函数的类型
    TS -- (1)环境,快速入门,基础类型,类型断言、变量声明、解构、展开
    css的三定位方式的区别
    Array循环
    scroll操作
    【Nodejs】记一次图像识别的冒险
  • 原文地址:https://www.cnblogs.com/dev2007/p/6520023.html
Copyright © 2011-2022 走看看