我们知道Springmvc默认返回的是一个视图,而在前后端分离的开发模式中,我们经常使用Json格式的数据进行前后端数据的交换。通常情况下有两种方式去构建一个Json格式的响应数据,第一种是直接手动拼接Json格式的字符串,然后以String返回,第二种是使用对象转换器来完成对象与Json数据的转换。
第一种方式太low了,我们来说第二种方式,通过@ResponseBody注解和MappingJackson2HttpMessageConverter来完成 对象到Json串的转换。

依赖:

<dependency>
	<groupId>com.fasterxml.jackson.core</groupId>
	<artifactId>jackson-annotations</artifactId>
	<version>2.5.4</version>
</dependency>
<dependency>
	<groupId>com.fasterxml.jackson.core</groupId>
	<artifactId>jackson-core</artifactId>
	<version>2.5.4</version>
</dependency>
<dependency>
	<groupId>com.fasterxml.jackson.core</groupId>
	<artifactId>jackson-databind</artifactId>
	<version>2.5.4</version>
</dependency>

spring的配置文件中配置MappingJackson2HttpMessageConverter转换器

<mvc:annotation-driven>
		<mvc:message-converters>
			<bean
				class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
				<property name="objectMapper">
					<bean class="com.fasterxml.jackson.databind.ObjectMapper">
						<property name="dateFormat">
							<bean class="java.text.SimpleDateFormat">
								<constructor-arg type="java.lang.String" value="yyyy-MM-dd HH:mm:ss" />
							</bean>
						</property>
					</bean>
				</property>
			</bean>
		</mvc:message-converters>
	</mvc:annotation-driven>

先来看三个接口描述:
这里写图片描述

  • 不使用@ResponseBodySpringmvc默认是返回一个视图,因此第一个会报错

    这里写图片描述

  • 返回自定义的Json串

    这里写图片描述

  • 使用Json转换器

    这里写图片描述

总结:

  1. 返回前端一个对象时,MappingJackson2HttpMessageConverter会自动将对象转换成Json格式数据,并且我们可以指定转换器的一些属性,例如上面指定了日期格式。

  2. 我们在使用com.fasterxml.jackson.databind.ObjectMapper进行对象和json的转换时,对于jsonList的操作,应该用下面的这种方法:

    import com.fasterxml.jackson.core.type.TypeReference;
    import com.fasterxml.jackson.databind.DeserializationFeature;
    import com.fasterxml.jackson.databind.ObjectMapper;
    List<User> userList = new ArrayList<>();
    userList.add(new User("zhangsan",18));
    userList.add(new User("lisi",19));
    ObjectMapper mapper = new ObjectMapper();
    mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
    try {
    	// 集合转json
        String userJson = mapper.writeValueAsString(userList);
        // json转集合
        List<User> users = mapper.readValue(userJson,new TypeReference<List<User>>() { });
        System.out.println(users);
    } catch (IOException e) {
        e.printStackTrace();
    }
    
GitHub 加速计划 / js / json
41.72 K
6.61 K
下载
适用于现代 C++ 的 JSON。
最近提交(Master分支:1 个月前 )
960b763e 2 个月前
8c391e04 5 个月前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐