springboot restTemplate èªå®ä¹æ¶æ¯è½¬æ¢å¨
Â
Â
***********************
ç¸å ³ç±»ä¸æ¥å£
Â
HttpMessageConverter
public interface HttpMessageConverter<T> {
boolean canRead(Class<?> var1, @Nullable MediaType var2);
boolean canWrite(Class<?> var1, @Nullable MediaType var2);
List<MediaType> getSupportedMediaTypes();
T read(Class<? extends T> var1, HttpInputMessage var2) throws IOException, HttpMessageNotReadableException;
void write(T var1, @Nullable MediaType var2, HttpOutputMessage var3) throws IOException, HttpMessageNotWritableException;
}
Â
AbstractHttpMessageConverter
public abstract class AbstractHttpMessageConverter<T> implements HttpMessageConverter<T> {
protected final Log logger = HttpLogging.forLogName(this.getClass());
private List<MediaType> supportedMediaTypes = Collections.emptyList();
@Nullable
private Charset defaultCharset;
***********
æé æ¹æ³
protected AbstractHttpMessageConverter() {
}
protected AbstractHttpMessageConverter(MediaType supportedMediaType) {
this.setSupportedMediaTypes(Collections.singletonList(supportedMediaType));
}
protected AbstractHttpMessageConverter(MediaType... supportedMediaTypes) {
this.setSupportedMediaTypes(Arrays.asList(supportedMediaTypes));
}
protected AbstractHttpMessageConverter(Charset defaultCharset, MediaType... supportedMediaTypes) {
this.defaultCharset = defaultCharset;
this.setSupportedMediaTypes(Arrays.asList(supportedMediaTypes));
}
***********
æ®éæ¹æ³
public void setSupportedMediaTypes(List<MediaType> supportedMediaTypes) {
public List<MediaType> getSupportedMediaTypes() {
public void setDefaultCharset(@Nullable Charset defaultCharset) {
public Charset getDefaultCharset() {
public boolean canRead(Class<?> clazz, @Nullable MediaType mediaType) {
protected boolean canRead(@Nullable MediaType mediaType) {
public final T read(Class<? extends T> clazz, HttpInputMessage inputMessage) throws IOException, HttpMessageNotReadableException {
public boolean canWrite(Class<?> clazz, @Nullable MediaType mediaType) {
protected boolean canWrite(@Nullable MediaType mediaType) {
public final void write(T t, @Nullable MediaType contentType, HttpOutputMessage outputMessage) throws IOException, HttpMessageNotWritableException {
protected void addDefaultHeaders(HttpHeaders headers, T t, @Nullable MediaType contentType) throws IOException {
protected MediaType getDefaultContentType(T t) throws IOException {
protected Long getContentLength(T t, @Nullable MediaType contentType) throws IOException {
protected abstract boolean supports(Class<?> var1);
protected abstract T readInternal(Class<? extends T> var1, HttpInputMessage var2) throws IOException, HttpMessageNotReadableException;
protected abstract void writeInternal(T var1, HttpOutputMessage var2) throws IOException, HttpMessageNotWritableException;
Â
Â
***********************
示ä¾
Â
******************
config å±
Â
CustomHttpMessageConverterï¼ä½¿ç¨fastjsonåºååãååºåå对象
@Component
public class CustomHttpMessageConverter extends AbstractHttpMessageConverter<Object> {
public CustomHttpMessageConverter(){
super(StandardCharsets.UTF_8,MediaType.ALL);
}
@Override
protected boolean supports(Class<?> aClass) {
return true;
}
@Override
protected Object readInternal(Class<?> aClass, HttpInputMessage httpInputMessage) throws IOException, HttpMessageNotReadableException {
return JSONObject.parseObject(StreamUtils.copyToString(httpInputMessage.getBody(), StandardCharsets.UTF_8),aClass);
}
@Override
protected void writeInternal(Object o, HttpOutputMessage httpOutputMessage) throws IOException, HttpMessageNotWritableException {
httpOutputMessage.getBody().write(JSONObject.toJSONBytes(o));
}
}
Â
WebConfig
@Configuration
public class WebConfig {
@Resource
private CustomHttpMessageConverter customHttpMessageConverter;
@Bean
public RestTemplate initRestTemplate(){
RestTemplate restTemplate= new RestTemplate();
restTemplate.getMessageConverters().set(5,customHttpMessageConverter);
//使ç¨èªå®ä¹çæ¶æ¯è½¬æ¢å¨æ¿æ¢MappingJackson2HttpMessageConverter
return restTemplate;
}
}
Â
restTemplateé»è®¤çæ¶æ¯è½¬æ¢å¨ï¼restTemplate.getMessageConverters()
           Â
Â
******************
controller å±
Â
HelloController
@RestController
public class HelloController {
@RequestMapping("/hello")
public Map<String,String> hello(){
Map<String,String> params=new HashMap<>();
params.put("name","çç°æä¸");
params.put("age","20");
return params;
}
}
Â
Hello2Controller
@RestController
public class Hello2Controller {
@Resource
private RestTemplate restTemplate;
@RequestMapping("/test")
public Person test(){
return restTemplate.getForObject("http://localhost:8080/hello",Person.class);
}
}
Â
Â
***********************
使ç¨æµè¯
Â
localhost:8080/test
            Â
Â
Â