您的位置:首页 > 编程语言 > Java开发

Spring MVC整合fastjson

2016-04-05 15:59 357 查看
接到任务,需要springmvc整合fastjson,原因嘛,当然是为了快。

百度到的资料不全面,因此,自己总结一下,不妥的地方请大家指正。

1,首先引入fastjson的jar包

pom.xml

<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.8</version>
</dependency>


2,在springmvc的配置中启用fastjson

<mvc:annotation-driven>
<mvc:message-converters register-defaults="true" >
<bean class="com.undersea.frame.MappingFastJsonHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>text/html;charset=UTF-8</value>
<value>application/json</value>
</list>
</property>
<property name="serializerFeature">
<array>
<value>WriteMapNullValue</value>
<value>QuoteFieldNames</value>
</array>
</property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>


对于这个,网上有另一种写法

<mvc:annotation-driven>
<mvc:message-converters register-defaults="true">
<bean class="com.undersea.frame.MappingFastJsonHttpMessageConverter">
<property name="supportedMediaTypes" value="application/json"/>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>


貌似两种方法用的人都有,但是有些前台的框架一定要html哪个,第一种是不会错的

3.添加MappingFastJsonHttpMessageConverter类。这个百度的教程里没说,我也是错了之后才发现的。

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();
}
}
4.配置现在就完了,接着就可以用了,用的时时候需要在用的函数上加上注解

@ResponseBody,这个表示 用我们配置好的东西返回json,接着,就可以直接return 对象啦

983a
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: