@Test public void test8_2() throws Exception { // ResultActions actions = mockMvc.perform((post("/jsonp-fastjsonview/test8?callback=fnUpdateSome").characterEncoding( // "UTF-8"))); // actions.andDo(print()); // actions.andExpect(status().isOk()).andExpect(content().contentType(APPLICATION_JAVASCRIPT)) // .andExpect(content().string("fnUpdateSome({\"id\":100,\"name\":\"测试\"})")); MvcResult mvcResult = mockMvc.perform(post("/jsonp-fastjsonview/test8?callback=fnUpdateSome").characterEncoding("UTF-8")) .andExpect(request().asyncStarted()) .andReturn(); mockMvc.perform(asyncDispatch(mvcResult)) .andExpect(status().isOk()) .andExpect(content().contentType(FastJsonHttpMessageConverter.APPLICATION_JAVASCRIPT)) .andExpect(content().string("/**/fnUpdateSome({})")); }
/** * 修改自定义消息转换器 * @param converters 消息转换器列表 */ @Override public void configureMessageConverters(List<HttpMessageConverter<?>> converters) { //调用父类的配置 super.configureMessageConverters(converters); //创建fastJson消息转换器 FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter(); //处理中文乱码问题 List<MediaType> fastMediaTypes = new ArrayList<>(); fastMediaTypes.add(MediaType.APPLICATION_JSON_UTF8); fastConverter.setSupportedMediaTypes(fastMediaTypes); //创建配置类 FastJsonConfig fastJsonConfig = new FastJsonConfig(); //修改配置返回内容的过滤 fastJsonConfig.setSerializerFeatures( SerializerFeature.DisableCircularReferenceDetect, SerializerFeature.WriteMapNullValue, SerializerFeature.WriteNullStringAsEmpty ); fastConverter.setFastJsonConfig(fastJsonConfig); //将fastjson添加到视图消息转换器列表内 converters.add(fastConverter); }
private FastJsonHttpMessageConverter fastJsonHttpMessageConverter() { FastJsonHttpMessageConverter httpMessageConverter = new FastJsonHttpMessageConverter(); FastJsonConfig fastJsonConfig = new FastJsonConfig(); fastJsonConfig.setSerializerFeatures(SerializerFeature.QuoteFieldNames, SerializerFeature.WriteEnumUsingToString, SerializerFeature.WriteMapNullValue, SerializerFeature.WriteDateUseDateFormat); fastJsonConfig.setSerializeFilters(new ValueFilter() { @Override public Object process(Object o, String s, Object source) { if (source == null) { return ""; } if (source instanceof Date) { return ((Date) source).getTime(); } return source; } }); httpMessageConverter.setFastJsonConfig(fastJsonConfig); return httpMessageConverter; }
/** * 自定义 一个 json 转换器 * 详见 fast json 官方文档 * * @return */ private HttpMessageConverter getFastJsonConverter() { FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter(); //自定义配置... com.alibaba.fastjson.support.config.FastJsonConfig config = new com.alibaba.fastjson.support.config.FastJsonConfig(); SerializerFeature[] features = { SerializerFeature.DisableCircularReferenceDetect, SerializerFeature.WriteDateUseDateFormat, SerializerFeature.PrettyFormat}; config.setSerializerFeatures(features); config.setDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); config.setCharset(StandardCharsets.UTF_8); converter.setFastJsonConfig(config); return converter; }
/** * 配置使用springmvc fastjson * @return */ @Bean public HttpMessageConverters fastJsonHttpMessageConverters() { FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter(); FastJsonConfig fastJsonConfig = new FastJsonConfig(); fastJsonConfig.setSerializerFeatures(SerializerFeature.PrettyFormat); fastConverter.setFastJsonConfig(fastJsonConfig); HttpMessageConverter<?> converter = fastConverter; return new HttpMessageConverters(converter); }
@Bean public HttpMessageConverters fastJsonHttpMessageConverters() { FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter(); //处理中文乱码 List<MediaType> fastMediaTypes = new ArrayList<>(); fastMediaTypes.add(MediaType.APPLICATION_JSON_UTF8); fastConverter.setSupportedMediaTypes(fastMediaTypes); return new HttpMessageConverters((HttpMessageConverter<?>) fastConverter); }
/** * 配置fastJson * @param converters */ @Override public void configureMessageConverters(List<HttpMessageConverter<?>> converters) { FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter(); FastJsonConfig fastJsonConfig = new FastJsonConfig(); fastJsonConfig.setSerializerFeatures(SerializerFeature.PrettyFormat); fastConverter.setFastJsonConfig(fastJsonConfig); converters.add(fastConverter); super.configureMessageConverters(converters); }
@Bean public FastJsonHttpMessageConverter fastJsonHttpMessageConverters() { ParserConfig.getGlobalInstance().setAutoTypeSupport(true); FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter(); FastJsonConfig fastJsonConfig = new FastJsonConfig(); fastJsonConfig.setSerializerFeatures(SerializerFeature.PrettyFormat); fastConverter.setFastJsonConfig(fastJsonConfig); return fastConverter; }
@Override public void configureMessageConverters(List<HttpMessageConverter<?>> converters) { FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter(); converters.add(converter); }
@Override public void extendMessageConverters(List<HttpMessageConverter<?>> converters) { converters.add(0, new FastJsonHttpMessageConverter()); super.extendMessageConverters(converters); }
@Test public void test8() throws Exception { mockMvc.perform( (post("/jsonp-fastjsonview/test8").characterEncoding("UTF-8") .contentType(FastJsonHttpMessageConverter.APPLICATION_JAVASCRIPT))).andExpect(status().isOk()).andDo(print()); }
@SuppressWarnings("deprecation") public void test_read() throws Exception { FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter(); converter.setCharset(Charset.forName("UTF-8")); Assert.assertEquals(Charset.forName("UTF-8"), converter.getCharset()); converter.setFeatures(SerializerFeature.BrowserCompatible); Assert.assertEquals(1, converter.getFeatures().length); Assert.assertEquals(SerializerFeature.BrowserCompatible, converter.getFeatures()[0]); Assert.assertNull(converter.getDateFormat()); converter.setDateFormat("yyyyMMdd"); converter.setFilters(serializeFilter); Assert.assertEquals(1, converter.getFilters().length); Assert.assertEquals(serializeFilter, converter.getFilters()[0]); converter.addSerializeFilter(serializeFilter); Assert.assertEquals(2, converter.getFilters().length); converter.addSerializeFilter(null); converter.setSupportedMediaTypes(Arrays .asList(new MediaType[] { MediaType.APPLICATION_JSON_UTF8 })); Assert.assertEquals(1, converter.getSupportedMediaTypes().size()); Method method = FastJsonHttpMessageConverter.class.getDeclaredMethod( "supports", Class.class); method.setAccessible(true); method.invoke(converter, int.class); HttpInputMessage input = new HttpInputMessage() { public HttpHeaders getHeaders() { // TODO Auto-generated method stub return null; } public InputStream getBody() throws IOException { return new ByteArrayInputStream("{\"id\":123}".getBytes(Charset .forName("UTF-8"))); } }; VO vo = (VO) converter.read(VO.class, input); Assert.assertEquals(123, vo.getId()); final ByteArrayOutputStream byteOut = new ByteArrayOutputStream(); HttpOutputMessage out = new HttpOutputMessage() { public HttpHeaders getHeaders() { return new HttpHeaders(); } public OutputStream getBody() throws IOException { return byteOut; } }; converter.write(vo, MediaType.TEXT_PLAIN, out); byte[] bytes = byteOut.toByteArray(); Assert.assertEquals("{\"id\":\"123\"}", new String(bytes, "UTF-8")); }
public void test_1() throws Exception { FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter(); Assert.assertNotNull(converter.getFastJsonConfig()); converter.setFastJsonConfig(new FastJsonConfig()); converter.canRead(VO.class, MediaType.APPLICATION_JSON_UTF8); converter.canWrite(VO.class, MediaType.APPLICATION_JSON_UTF8); converter.canRead(VO.class, VO.class, MediaType.APPLICATION_JSON_UTF8); converter.canWrite(VO.class, VO.class, MediaType.APPLICATION_JSON_UTF8); HttpInputMessage input = new HttpInputMessage() { public HttpHeaders getHeaders() { // TODO Auto-generated method stub return null; } public InputStream getBody() throws IOException { return new ByteArrayInputStream("{\"id\":123}".getBytes(Charset .forName("UTF-8"))); } }; VO vo = (VO) converter.read(VO.class, VO.class, input); Assert.assertEquals(123, vo.getId()); final ByteArrayOutputStream byteOut = new ByteArrayOutputStream(); HttpOutputMessage out = new HttpOutputMessage() { public HttpHeaders getHeaders() { return new HttpHeaders(); } public OutputStream getBody() throws IOException { return byteOut; } }; converter.write(vo, VO.class, MediaType.TEXT_PLAIN, out); byte[] bytes = byteOut.toByteArray(); Assert.assertEquals("{\"id\":123}", new String(bytes, "UTF-8")); converter.setSupportedMediaTypes(Collections .singletonList(MediaType.APPLICATION_JSON)); converter.write(vo, VO.class, null, out); converter.write(vo, VO.class, MediaType.ALL, out); HttpOutputMessage out2 = new HttpOutputMessage() { public HttpHeaders getHeaders() { return new HttpHeaders() { private static final long serialVersionUID = 1L; @Override public MediaType getContentType() { return MediaType.APPLICATION_JSON; } @Override public long getContentLength() { return 1; } }; } public OutputStream getBody() throws IOException { return byteOut; } }; converter.write(vo, VO.class, MediaType.ALL, out2); }
public ConfigServicePropertySourceLocator(ConfigClientProperties clientProperties) { this.clientProperties = clientProperties; restTemplate = new RestTemplate(); restTemplate.getMessageConverters().add(new FastJsonHttpMessageConverter()); }
@Override public void configureMessageConverters(List<HttpMessageConverter<?>> converters) { FastJsonHttpMessageConverter converter= new FastJsonHttpMessageConverter(); converters.add(converter); }
private HttpClientTemplate() { // 长连接保持30秒 PoolingHttpClientConnectionManager pollingConnectionManager = new PoolingHttpClientConnectionManager(timeToLive, TimeUnit.SECONDS); // 总连接数 pollingConnectionManager.setMaxTotal(maxTotal); // 同路由的并发数 pollingConnectionManager.setDefaultMaxPerRoute(defaultMaxPerRoute); HttpClientBuilder httpClientBuilder = HttpClientBuilder.create(); httpClientBuilder.setConnectionManager(pollingConnectionManager); // 重试次数,默认是3次,没有开启 httpClientBuilder.setRetryHandler(new DefaultHttpRequestRetryHandler(retryCount, requestSentRetryEnabled)); // 保持长连接配置,需要在头添加Keep-Alive httpClientBuilder.setKeepAliveStrategy(new DefaultConnectionKeepAliveStrategy()); List<Header> headers = new ArrayList<>(); // 参考:http://www.cnblogs.com/sink_cup/archive/2011/03/15/http_user_agent.html // headers.add(new BasicHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.16 Safari/537.36")); // 不需要设置,可能会乱码,请参考:http://www.crifan.com/set_accept_encoding_header_to_gzip_deflate_return_messy_code/ // headers.add(new BasicHeader("Accept-Encoding", "gzip,deflate")); // headers.add(new BasicHeader("Accept-Language", "zh-CN")); headers.add(new BasicHeader("Connection", "Keep-Alive")); httpClientBuilder.setDefaultHeaders(headers); HttpClient httpClient = httpClientBuilder.build(); // httpClient连接配置,底层是配置RequestConfig HttpComponentsClientHttpRequestFactory clientHttpRequestFactory = new HttpComponentsClientHttpRequestFactory(httpClient); // 连接超时 clientHttpRequestFactory.setConnectTimeout(connectTimeout); // 数据读取超时时间,即SocketTimeout clientHttpRequestFactory.setReadTimeout(readTimeout); // 连接不够用的等待时间,不宜过长,必须设置,比如连接不够用时,时间过长将是灾难性的 clientHttpRequestFactory.setConnectionRequestTimeout(connectionRequestTimeout); // 缓冲请求数据,默认值是true。通过POST或者PUT大量发送数据时,建议将此属性更改为false,以免耗尽内存。 if (!bufferRequestBody) { clientHttpRequestFactory.setBufferRequestBody(false); } // 添加内容转换器 // List<HttpMessageConverter<?>> messageConverters = new ArrayList<>(); messageConverters.add(new FastJsonHttpMessageConverter()); messageConverters.add(new StringHttpMessageConverter(Charset.forName(charset))); messageConverters.add(new ByteArrayHttpMessageConverter()); super.setMessageConverters(messageConverters); super.setRequestFactory(clientHttpRequestFactory); super.setErrorHandler(new DefaultResponseErrorHandler()); }
@Bean public HttpMessageConverters customConverters() { HttpMessageConverter<?> additional = new FastJsonHttpMessageConverter(); return new HttpMessageConverters(additional); }
@Override public void extendMessageConverters(List<HttpMessageConverter<?>> converters) { // 添加JSON支持 converters.add(new FastJsonHttpMessageConverter()); }
@Override public void extendMessageConverters(List<HttpMessageConverter<?>> converters) { converters.add(new FastJsonHttpMessageConverter()); }