`

SpringMVC杂记(八) 使用阿里巴巴的fastjson

阅读更多
1) 国产开源软件要支持的
<dependency>
	<groupId>com.alibaba</groupId>
	<artifactId>fastjson</artifactId>
	<version>1.1.22</version>
</dependency>


2) spring没有提供相应的HttpMessageConverter可以自己写一个。
package com.alibaba.fastjson.spring.support;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.nio.charset.Charset;

import org.springframework.http.HttpInputMessage;
import org.springframework.http.HttpOutputMessage;
import org.springframework.http.MediaType;
import org.springframework.http.converter.AbstractHttpMessageConverter;
import org.springframework.http.converter.HttpMessageNotReadableException;
import org.springframework.http.converter.HttpMessageNotWritableException;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.serializer.SerializerFeature;

public class MappingFastJsonHttpMessageConverter extends AbstractHttpMessageConverter<Object> {

	public static final Charset DEFAULT_CHARSET = Charset.forName("UTF-8");
	
	// fastjson特性参数
	private SerializerFeature[] serializerFeature;

	public SerializerFeature[] getSerializerFeature() {
		return serializerFeature;
	}

	public void setSerializerFeature(SerializerFeature[] serializerFeature) {
		this.serializerFeature = serializerFeature;
	}

	public MappingFastJsonHttpMessageConverter() {
		super(new MediaType("application", "json", DEFAULT_CHARSET));
	}

	@Override
	public boolean canRead(Class<?> clazz, MediaType mediaType) {
		// JavaType javaType = getJavaType(clazz);
		// return this.objectMapper.canDeserialize(javaType) &&
		// canRead(mediaType);
		return true;
	}

	@Override
	public boolean canWrite(Class<?> clazz, MediaType mediaType) {
		// return this.objectMapper.canSerialize(clazz) && canWrite(mediaType);
		return true;
	}

	@Override
	protected boolean supports(Class<?> clazz) {
		// should not be called, since we override canRead/Write instead
		throw new UnsupportedOperationException();
	}

	@Override
	protected Object readInternal(Class<?> clazz, HttpInputMessage inputMessage)
			throws IOException, HttpMessageNotReadableException {
		ByteArrayOutputStream baos = new ByteArrayOutputStream();
		int i;
		while ((i = inputMessage.getBody().read()) != -1) {
			baos.write(i);
		}
		return JSON.parseArray(baos.toString(), clazz);
	}

	@Override
	protected void writeInternal(Object o, HttpOutputMessage outputMessage)
			throws IOException, HttpMessageNotWritableException {
		String jsonString = JSON.toJSONString(o, serializerFeature);
		OutputStream out = outputMessage.getBody();
		out.write(jsonString.getBytes(DEFAULT_CHARSET));
		out.flush();
	}

}


3) 配置
<bean class="com.alibaba.fastjson.spring.support.MappingFastJsonHttpMessageConverter">
	<property name="supportedMediaTypes" value="application/json" />
	<property name="serializerFeature">
		<array>
			<value>WriteMapNullValue</value>
			<value>QuoteFieldNames</value>
		</array>
	</property>
</bean>
分享到:
评论
7 楼 jacking124 2013-04-30  
不错的,晚上看到了,谢谢了!!
6 楼 billson 2013-02-07  
Jstar
试一试把

<bean class="com.alibaba.fastjson.spring.support.MappingFastJsonHttpMessageConverter">
	<property name="supportedMediaTypes" value="application/json" />
	<property name="serializerFeature">
		<array>
			<value>WriteMapNullValue</value>
			<value>QuoteFieldNames</value>
		</array>
	</property>
</bean>


放在 <mvc:annotation-driven> 里面

如下:
	<mvc:annotation-driven>
		<mvc:message-converters register-defaults="true" >
			<bean class="com.alibaba.fastjson.spring.support.MappingFastJsonHttpMessageConverter">
				<property name="supportedMediaTypes" value="application/json" />
				<property name="serializerFeature">
					<array>
						<value>WriteMapNullValue</value>
						<value>QuoteFieldNames</value>
					</array>
				</property>
			</bean>
		</mvc:message-converters>
	</mvc:annotation-driven>
5 楼 Jstar 2013-01-09  
Hello ,我又来了,我按照你这个来做,返回的状态是406(表示无法使用请求的内容特性来响应请求的网页),而不是200,下面是我的详细说明,麻烦帮忙看看,谢谢
http://www.oschina.net/question/865078_87038

   
4 楼 yingzhor 2012-08-16  
一般只有使用到ajax技术的时候才通过后端返回json对象。

在前端json对象就是一个javascript对象。 直接取其属性即可。
3 楼 Jstar 2012-08-16  
THANKS~~~~~~

另外我想问下,返回的JSON在前端页面是怎样绑定, 用datalink? 有没有例子。
2 楼 yingzhor 2012-08-15  
@ResponseBody 标注加到Controller 方法上返回的即为json

不加,那就和普通的Controller 没有什么不同。

如:
返回String的是逻辑视图名。
ModelAndView 模型和逻辑视图一起返回。
1 楼 Jstar 2012-08-15  
配置好这个后在controller里面还需要加什么其他注解了么,如果有些方法是返回json的,有些又不想返回json的该怎么做。

相关推荐

    springmvc+fastjson demo

    Fastjson 则是阿里巴巴开源的一个高性能的 JSON 解析和生成库,它可以快速地将 Java 对象转换为 JSON 字符串,也可以将 JSON 字符串转换为 Java 对象。 在"springmvc+fastjson demo"中,这个项目演示了如何在 ...

    SpringMvc+mybatis+fastJson+druid+resteasy...

    开发工具采用IDEA,用maven构建的项目,框架采用SpringMVC,数据库采用mysql与mybatis配合,数据格式采用阿里巴巴工具fastJson,数据源druid,另外还添加了resteasy中的功能

    SpringMVC+fastjson+Swagger集成示例源码

    Fastjson是阿里巴巴开发的一个Java语言编写的高性能功能完备的JSON库。它不仅支持将Java对象转换为JSON字符串,也可以将JSON内容解析为Java对象,这在数据交换和序列化场景中非常实用。Fastjson以其高效的性能和简洁...

    SpringMVC杂记(五) JSR303数据验证

    在本篇《SpringMVC杂记(五) JSR303数据验证》中,我们将深入探讨SpringMVC框架如何集成并使用JSR303(JavaBeans Validation)来进行数据验证,这是一种强大的验证机制,可以确保应用程序接收到的数据是合法且符合...

    SpringMVC配合Fastjson的内存马利用与分析1

    SpringMVC 配合 Fastjson 的内存马利用与分析 SpringMVC 是一种基于 Java 的实现了 Web MVC 设计模式的请求驱动类型的轻量级 Web 框架,即使 用了 MVC 架构模式的思想,将 web 层进 行职责解耦,基于请求驱动指的...

    springMVC整合FastJson实现RestFul风格API

    FastJson是阿里巴巴开源的一个高性能的JSON库,它可以用于序列化和反序列化Java对象,非常适合于处理API的输入输出数据。本文将详细介绍如何在Spring MVC项目中整合FastJson,实现RESTful风格的API。 首先,我们...

    springmvc 配置fastjson

    Fastjson 是阿里巴巴开源的一个高性能的JSON库,它能够方便地将Java对象转换为JSON字符串,也可以将JSON内容解析为Java对象。在Spring MVC中集成Fastjson,可以极大地提高应用在处理数据交换时的效率和便捷性。 在...

    SpringMVC上传图片文件到 阿里云【2018年最新版】【JavaWeb】

    在本教程中,我们将深入探讨如何使用SpringMVC框架与阿里云对象存储服务(OSS)集成,实现在JavaWeb应用中上传图片文件。阿里云OSS是一种安全、可靠的云存储服务,适合存储大量数据,如图片、视频、文档等。而...

    springMVC整合FastJson实现RestFul风格API涉及jar包

    在开发Web应用时,Spring MVC框架常用于构建后端服务,而FastJson是阿里巴巴提供的一款高效、功能强大的JSON处理库。本教程将详细介绍如何在Spring MVC项目中整合FastJson,以便实现RESTful风格的API。 首先,理解...

    jar包整合:Springmvc+hibernate+Ehcache+shior+mysql+Oracle+fastjson

    7. **Fastjson**:Fastjson是阿里巴巴的一个高性能的JSON库,它能将Java对象转换为JSON字符串,也能将JSON内容转换为Java对象。在处理JSON格式的数据时,Fastjson的性能表现优秀,且使用简便。 这个项目的整合意味...

    spring,springmvc,mybatis(ssm)最新spring(4.0,阿里druid数据源等最新技术o)

    **阿里Druid数据源**:Druid是阿里巴巴开源的一个高性能、可扩展的Java数据库连接池。它除了具备基本的数据源功能外,还提供了强大的监控和扩展能力,如SQL解析、SQL执行计划分析、连接池健康检查等。使用Druid可以...

    springmvc4+spring4+hibernate5.1.3+二级缓存ehcache+fastjson配置

    Fastjson是阿里巴巴开源的一个高性能的JSON库,它能够将Java对象转换成JSON字符串,也可以将JSON内容解析为Java对象。在Web开发中,Fastjson常用于前后端数据交换,因为它速度快,易用性好。 这个项目配置集成了...

    Dubbo与Zookeeper、SpringMVC整合和使用

    Dubbo 是阿里巴巴开源的一款高性能、轻量级的Java服务治理框架,它专注于服务调用、注册、监控和服务发现。Dubbo的核心功能包括服务提供者(Provider)、服务消费者(Consumer)、注册中心(Registry)和监控中心...

    SpringMVC(八)处理AJAX请求

    SpringMVC(八)处理AJAX请求

    java springmvc

    **SpringMVC详解** SpringMVC是Spring框架的一部分,它是一个模型-视图-控制器(MVC)架构的实现,用于构建Web应用程序。SpringMVC通过解耦控制器、业务逻辑和服务层,使得开发者可以更专注于应用程序的核心功能。...

    SpringMVC完整使用教程

    本教程将深入探讨 SpringMVC 的核心功能和使用方法。 ### 第 1 章 SpringMVC 概述 SpringMVC 旨在简化 Web 开发,通过解耦控制器、服务、业务逻辑和视图,提高代码的可测试性和可维护性。其核心组件包括 ...

    fastjson+ajax+sppringmvc前后使用json传值的demo

    2. Fastjson:Fastjson是阿里巴巴提供的一款Java语言编写的高性能功能完备的JSON库。它可以用来将Java对象转换为JSON字符串,也可以将JSON内容转换为对应的Java对象。Fastjson的性能优异,且使用简单,非常适合于...

    详解在springmvc中解决FastJson循环引用的问题

    本篇文章主要介绍了在springmvc中解决FastJson循环引用的问题,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

Global site tag (gtag.js) - Google Analytics