Skip to content

Commit

Permalink
1、增加Fastjson的Converter配置;
Browse files Browse the repository at this point in the history
  • Loading branch information
storezhang committed Dec 14, 2016
1 parent 8af42bb commit 8cd1b10
Show file tree
Hide file tree
Showing 15 changed files with 700 additions and 523 deletions.
1 change: 1 addition & 0 deletions .idea/compiler.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions .idea/inspectionProfiles/Project_Default.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

7 changes: 7 additions & 0 deletions .idea/inspectionProfiles/profiles_settings.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1,001 changes: 566 additions & 435 deletions .idea/workspace.xml

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
<groupId>com.ruijc</groupId>
<artifactId>utils</artifactId>
<packaging>pom</packaging>
<version>1.1.0</version>
<version>1.2.0</version>
<name>utils</name>
<description>我和各种工具包。</description>
<url>https://www.ruijc.com</url>
Expand Down
2 changes: 1 addition & 1 deletion spring-boot-starter-fastjson/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
<modelVersion>4.0.0</modelVersion>

<artifactId>spring-boot-starter-fastjson</artifactId>
<version>2.0.0</version>
<version>2.1.0</version>
<name>spring-boot-starter-fastjson</name>
<description>Springboot自动化配置Fastjson框架并支持JSONP操作。</description>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,10 @@
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.alibaba.fastjson.serializer.ValueFilter;
import com.alibaba.fastjson.support.config.FastJsonConfig;
import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter;
import com.ruijc.fastjson.converter.MyFastJsonHttpMessageConverter;
import com.ruijc.util.CollectionUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
Expand All @@ -15,6 +17,7 @@
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.DependsOn;
import org.springframework.http.converter.HttpMessageConverter;

import java.util.ArrayList;
Expand All @@ -41,39 +44,32 @@ protected static class FastJson2HttpMessageConverterConfiguration {
private FastJsonProperties properties;

@Bean
@ConditionalOnMissingBean({com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter.class})
public HttpMessageConverters customConverters() {
@ConditionalOnMissingBean(com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter.class)
public HttpMessageConverters customConverters(FastJsonHttpMessageConverter converter) {
Collection<HttpMessageConverter<?>> messageConverters = new ArrayList<HttpMessageConverter<?>>();

MyFastJsonHttpMessageConverter converter = new MyFastJsonHttpMessageConverter();
if (null == converter) {
Class<?> converterClass = properties.getConverter();
converter = (FastJsonHttpMessageConverter) BeanUtils.instantiate(converterClass);
}

FastJsonConfig config = new FastJsonConfig();
List<String> features = properties.getFeatures();
List<SerializerFeature> features = properties.getFeatures();
if (!CollectionUtils.isBlank(features)) {
SerializerFeature[] featureArray = new SerializerFeature[features.size()];
for (int i = 0; i < features.size(); ++i) {
try {
featureArray[i] = SerializerFeature.valueOf(features.get(i));
} catch (IllegalArgumentException e) {
continue;
}
}
config.setSerializerFeatures(featureArray);
config.setSerializerFeatures(features.toArray(featureArray));
}

config.setSerializeFilters(new ValueFilter() {
public Object process(Object o, String s, Object o1) {
if (null == o1) {
o1 = "";
}

return o1;
}
});
converter.setFastJsonConfig(config);
messageConverters.add(converter);

return new HttpMessageConverters(true, messageConverters);
}

@Bean
@ConditionalOnMissingBean(FastJsonHttpMessageConverter.class)
public FastJsonHttpMessageConverter converter() {
return new MyFastJsonHttpMessageConverter();
}
}
}
Original file line number Diff line number Diff line change
@@ -1,19 +1,35 @@
package com.ruijc.fastjson;

import com.alibaba.fastjson.serializer.SerializerFeature;
import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter;
import com.ruijc.fastjson.converter.MyFastJsonHttpMessageConverter;
import org.springframework.boot.context.properties.ConfigurationProperties;

import java.util.List;

@ConfigurationProperties("spring.http.converters.fastjson")
public class FastJsonProperties {

private List<String> features;
private List<SerializerFeature> features;
private Class<? extends FastJsonHttpMessageConverter> converter;

public List<String> getFeatures() {
public FastJsonProperties() {
converter = MyFastJsonHttpMessageConverter.class;
}

public List<SerializerFeature> getFeatures() {
return features;
}

public void setFeatures(List<String> features) {
public void setFeatures(List<SerializerFeature> features) {
this.features = features;
}

public Class<? extends FastJsonHttpMessageConverter> getConverter() {
return converter;
}

public void setConverter(Class<? extends FastJsonHttpMessageConverter> converter) {
this.converter = converter;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -44,13 +44,17 @@ protected void writeInternal(Object obj, HttpOutputMessage outputMessage) throws
if (!StringUtils.isBlank(callback)) {
text = callback + "(" + text + ")";
}
byte[] bytes = text.getBytes(getFastJsonConfig().getCharset());
byte[] bytes = getResult(text).getBytes(getFastJsonConfig().getCharset());
out.write(bytes);
} else {
OutputStream out = outputMessage.getBody();
String text = JSON.toJSONString(obj, getFastJsonConfig().getSerializerFeatures());
byte[] bytes = text.getBytes(getFastJsonConfig().getCharset());
byte[] bytes = getResult(text).getBytes(getFastJsonConfig().getCharset());
out.write(bytes);
}
}

protected String getResult(String old) {
return old;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package com.ruijc.fastjson;

import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class Config {

@Bean
public FastJsonHttpMessageConverter converter() {
return new TestFastjsonHttpMessageConverter();
}
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
package com.ruijc.fastjson;

import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.mock.web.MockServletContext;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import org.springframework.web.context.WebApplicationContext;

import static org.hamcrest.CoreMatchers.equalTo;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;

@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, classes = MockServletContext.class)
@SpringBootApplication
public class FastjsonTest {

private MockMvc mvc;
@Autowired
protected WebApplicationContext wac;

@Before
public void setup() {
mvc = MockMvcBuilders.webAppContextSetup(wac).build();
}

@Test
public void testJsonp() throws Exception {
mvc.perform(get("/user/jsonp"))
.andExpect(status().isOk())
.andExpect(content().string(equalTo("user({\"id\":1})")));
}

@Test
public void testRest() throws Exception {
mvc.perform(get("/user/rest"))
.andExpect(status().isOk())
.andExpect(content().string(equalTo("{\"id\":1}")));
}
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package com.ruijc.fastjson;

import com.ruijc.fastjson.converter.MyFastJsonHttpMessageConverter;

public class TestFastjsonHttpMessageConverter extends MyFastJsonHttpMessageConverter {

@Override
protected String getResult(String old) {
System.err.println("--->TestFastjsonHttpMessageConverter");
return super.getResult(old);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,12 @@
import java.util.Map;

@RestController
@RequestMapping("/test")
public class TestController {
@RequestMapping("/user")
public class UserController {

private User data;

public TestController() {
public UserController() {
data = new User();
data.setId(1L);
}
Expand All @@ -30,10 +30,4 @@ public User testJSONP() {
public User testRest() {
return data;
}

@GetMapping("/includes")
@SerializeField(clazz = Map.class, includes = {"id"})
public User testIncludes() {
return data;
}
}

0 comments on commit 8cd1b10

Please sign in to comment.