/src/main/java/com/tts/component/converter/JsonHttpMessageConverter.java
Java | 83 lines | 64 code | 14 blank | 5 comment | 3 complexity | 6ebd448879169c3c97a7168ddf82f03c MD5 | raw file
- package com.tts.component.converter;
- import com.alibaba.fastjson.JSON;
- import com.alibaba.fastjson.serializer.SerializerFeature;
- import com.tts.util.JsonUtil;
- 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 org.springframework.stereotype.Service;
- import org.springframework.util.Base64Utils;
- import java.io.ByteArrayOutputStream;
- import java.io.IOException;
- import java.io.InputStream;
- import java.io.OutputStream;
- import java.nio.charset.Charset;
- /**
- * Created by tts on 2016/5/4.
- */
- @Service
- public class JsonHttpMessageConverter extends AbstractHttpMessageConverter<Object> {
- public static final Charset UTF8 = Charset.forName("UTF-8");
- private Charset charset;
- private SerializerFeature[] features;
- public JsonHttpMessageConverter() {
- super(new MediaType[]{new MediaType("application", "json", UTF8), new MediaType("application", "*+json", UTF8)});
- this.charset = UTF8;
- this.features = new SerializerFeature[0];
- }
- protected boolean supports(Class<?> clazz) {
- return true;
- }
- public Charset getCharset() {
- return this.charset;
- }
- public void setCharset(Charset charset) {
- this.charset = charset;
- }
- public SerializerFeature[] getFeatures() {
- return this.features;
- }
- public void setFeatures(SerializerFeature... features) {
- this.features = features;
- }
- public Object readInternal(Class<? extends Object> clazz, HttpInputMessage inputMessage) throws IOException, HttpMessageNotReadableException {
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- InputStream in = inputMessage.getBody();
- byte[] buf = new byte[1024];
- while(true) {
- int bytes = in.read(buf);
- if(bytes == -1) {
- // base64解码
- byte[] bytes1 = Base64Utils.decode(baos.toByteArray());
- return JsonUtil.toObject(new String(bytes1,0,bytes1.length),clazz);
- }
- if(bytes > 0) {
- baos.write(buf, 0, bytes);
- }
- }
- }
- protected void writeInternal(Object obj, HttpOutputMessage outputMessage) throws IOException, HttpMessageNotWritableException {
- OutputStream out = outputMessage.getBody();
- String text = JSON.toJSONString(obj, this.features);
- byte[] bytes = text.getBytes(this.charset);
- // base64编码
- out.write(Base64Utils.encode(bytes));
- }
- }