你可以提供自己的消息變換:
考慮,你需要發送一個自定義的內容類型,您將需要創建一個擴展AbstractHttpMessageConverter
假設RawHttpMessageConverter
類。您將需要爲抽象方法的具體實現:
supports(...)
- 隨時返回true
readInternal(Class<? extends T> clazz, HttpInputMessage inputMessage)
- 在這裏,你會從inputMessage.getBody() InputStream
writeInternal(T t, HttpOutputMessage outputMessage)
解組自定義的對象 - 在這裏你將你的馬歇爾對象T到outputMessage.getBody() OutputStream
此外,非常重要的是設置預期內容類型的列表:new MediaType("Raw", "8");
和regi你的消息轉換器列表中。
這是做到這一點的一種方式。另一種方式可能是擴展現有的消息轉換器,並只提供您所需的具體實現。我可以看到您的需求的最接近的消息轉換器(如果我理解正確)是StringHttpMessageConverter。在提供實現時,您只需創建一個MediaTypes列表作爲類變量,並向其添加「Raw」類型 - 即在構造函數中。覆蓋getSupportedMediaTypes()
並返回此列表。
當設置RestTemplate
你將有:
RestTemplate restTemplate = new RestTemplate();
List<HttpMessageConverter<AbstractHttpMessageConverter<?>>> converters = new ArrayList<HttpMessageConverter<AbstractHttpMessageConverter<?>>>();
converters.add(new RawHttpMessageConverter());
restTemplate.setMessageConverters(messageConverters);
提供更多,下面是一個自定義消息轉換器,我使用位圖下載:
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.springframework.http.HttpInputMessage;
import org.springframework.http.HttpOutputMessage;
import org.springframework.http.MediaType;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.HttpMessageNotReadableException;
import org.springframework.http.converter.HttpMessageNotWritableException;
import android.graphics.Bitmap;
import android.graphics.Bitmap.CompressFormat;
import android.graphics.BitmapFactory;
public class BitmapMessageConverter implements HttpMessageConverter<Bitmap> {
private static final int BUFFER_SIZE = 8 * 1024;
private List<MediaType> imageMediaTypes;
public BitmapMessageConverter() {
imageMediaTypes = new ArrayList<MediaType>();
imageMediaTypes.add(new MediaType("image", "*"));
imageMediaTypes.add(new MediaType("image", "png"));
imageMediaTypes.add(new MediaType("image", "jpeg"));
}
private boolean isRegisteredMediaType(MediaType mediaType) {
return imageMediaTypes.contains(mediaType);
}
@Override
public List<MediaType> getSupportedMediaTypes() {
return imageMediaTypes;
}
@Override
public Bitmap read(Class<? extends Bitmap> classArg, HttpInputMessage inputMessage) throws IOException, HttpMessageNotReadableException {
BufferedInputStream bis = new BufferedInputStream(inputMessage.getBody(), BUFFER_SIZE);
Bitmap result = BitmapFactory.decodeStream(bis);
return result;
}
@Override
public void write(Bitmap bitmap, MediaType mediaType, HttpOutputMessage outputMessage) throws IOException, HttpMessageNotWritableException {
BufferedOutputStream bos = new BufferedOutputStream(outputMessage.getBody(), BUFFER_SIZE);
bitmap.compress(CompressFormat.JPEG, 100, bos);
}
你可以發佈您如何配置你的RestTemplate?看起來你錯過了設置消息轉換器。 – gunar
RestTemplate restTemplate = new RestTemplate(true); HttpHeaders headers = new HttpHeaders(); headers.setContentType(new MediaType(「application」,「Xml」)); HttpEntity requestEntity =新HttpEntity ( \t \t \t \t myObject的,標頭); ResponseEntity responseEntity = restTemplate.exchange(url, \t \t HttpMethod.PUT,requestEntity,String.class); HttpStatus status = responseEntity.getStatusCode(); –
Kaps
...以及您正在使用的確切內容類型? – gunar