org.springframework.http.converter.HttpMessageConverter#write ( )源码实例Demo

下面列出了org.springframework.http.converter.HttpMessageConverter#write ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。

public ClientHttpResponse build(Object result, GenericException exception,
		RequestMetadata requestMetadata, RestMethodMetadata restMethodMetadata) {

	DubboHttpOutputMessage httpOutputMessage = new DubboHttpOutputMessage();

	HttpMessageConverterHolder httpMessageConverterHolder = httpMessageConverterResolver
			.resolve(requestMetadata, restMethodMetadata);

	if (httpMessageConverterHolder != null) {
		MediaType mediaType = httpMessageConverterHolder.getMediaType();
		HttpMessageConverter converter = httpMessageConverterHolder.getConverter();
		try {
			converter.write(result, mediaType, httpOutputMessage);
		}
		catch (IOException e) {
			e.printStackTrace();
		}
	}

	return new DubboClientHttpResponse(httpOutputMessage, exception);
}
 
源代码2 项目: spring-cloud-openfeign   文件: SpringEncoder.java
@SuppressWarnings("unchecked")
private FeignOutputMessage checkAndWrite(Object body, MediaType contentType,
		HttpMessageConverter converter, RequestTemplate request) throws IOException {
	if (converter.canWrite(body.getClass(), contentType)) {
		logBeforeWrite(body, contentType, converter);
		FeignOutputMessage outputMessage = new FeignOutputMessage(request);
		converter.write(body, contentType, outputMessage);
		return outputMessage;
	}
	else {
		return null;
	}
}
 
@SuppressWarnings({ "unchecked", "rawtypes", "resource" })
private ModelAndView handleResponseBody(Object returnValue, ServletWebRequest webRequest)
		throws ServletException, IOException {

	HttpInputMessage inputMessage = new ServletServerHttpRequest(webRequest.getRequest());
	List<MediaType> acceptedMediaTypes = inputMessage.getHeaders().getAccept();
	if (acceptedMediaTypes.isEmpty()) {
		acceptedMediaTypes = Collections.singletonList(MediaType.ALL);
	}
	MediaType.sortByQualityValue(acceptedMediaTypes);
	HttpOutputMessage outputMessage = new ServletServerHttpResponse(webRequest.getResponse());
	Class<?> returnValueType = returnValue.getClass();
	if (this.messageConverters != null) {
		for (MediaType acceptedMediaType : acceptedMediaTypes) {
			for (HttpMessageConverter messageConverter : this.messageConverters) {
				if (messageConverter.canWrite(returnValueType, acceptedMediaType)) {
					messageConverter.write(returnValue, acceptedMediaType, outputMessage);
					return new ModelAndView();
				}
			}
		}
	}
	if (logger.isWarnEnabled()) {
		logger.warn("Could not find HttpMessageConverter that supports return type [" + returnValueType + "] and " +
				acceptedMediaTypes);
	}
	return null;
}
 
@SuppressWarnings({ "unchecked", "rawtypes", "resource" })
private ModelAndView handleResponseBody(Object returnValue, ServletWebRequest webRequest)
		throws ServletException, IOException {

	HttpInputMessage inputMessage = new ServletServerHttpRequest(webRequest.getRequest());
	List<MediaType> acceptedMediaTypes = inputMessage.getHeaders().getAccept();
	if (acceptedMediaTypes.isEmpty()) {
		acceptedMediaTypes = Collections.singletonList(MediaType.ALL);
	}
	MediaType.sortByQualityValue(acceptedMediaTypes);
	HttpOutputMessage outputMessage = new ServletServerHttpResponse(webRequest.getResponse());
	Class<?> returnValueType = returnValue.getClass();
	if (this.messageConverters != null) {
		for (MediaType acceptedMediaType : acceptedMediaTypes) {
			for (HttpMessageConverter messageConverter : this.messageConverters) {
				if (messageConverter.canWrite(returnValueType, acceptedMediaType)) {
					messageConverter.write(returnValue, acceptedMediaType, outputMessage);
					return new ModelAndView();
				}
			}
		}
	}
	if (logger.isWarnEnabled()) {
		logger.warn("Could not find HttpMessageConverter that supports return type [" + returnValueType + "] and " +
				acceptedMediaTypes);
	}
	return null;
}
 
@Override
public RequestBody convert(T value) throws IOException {
	if (value != null) {
		if (log.isDebugEnabled()) {
			if (this.contentType != null) {
				log.debug("Writing [" + value + "] as \"" + this.contentType
						+ "\" using [" + messageConverter + "]");
			}
			else {
				log.debug("Writing [" + value + "] using [" + messageConverter + "]");
			}

		}

		return new RequestBody() {
			@Override
			public okhttp3.MediaType contentType() {
				return okhttp3.MediaType.parse(SpringRequestConverter.this.contentType.toString());
			}

			@Override
			public void writeTo(BufferedSink bufferedSink) throws IOException {
				@SuppressWarnings("unchecked")
				HttpMessageConverter<Object> copy = (HttpMessageConverter<Object>) messageConverter;
				copy.write(value, SpringRequestConverter.this.contentType,
						new HttpOutputMessage() {
							@Override
							public OutputStream getBody() throws IOException {
								return bufferedSink.outputStream();
							}

							@Override
							public HttpHeaders getHeaders() {
								return new HttpHeaders(); // TODO: where to get headers?
							}
						});
			}
		};

		/*
		 * FeignOutputMessage outputMessage = new FeignOutputMessage(request); try {
		 * 
		 * @SuppressWarnings("unchecked") HttpMessageConverter<Object> copy =
		 * (HttpMessageConverter<Object>) messageConverter; copy.write(requestBody,
		 * this.contentType, outputMessage); } catch (IOException ex) { throw new
		 * EncodeException("Error converting request body", ex); } // clear headers
		 * request.headers(null); // converters can modify headers, so update the
		 * request // with the modified headers
		 * request.headers(getHeaders(outputMessage.getHeaders()));
		 * 
		 * request.body(outputMessage.getOutputStream().toByteArray(),
		 * Charset.forName("UTF-8")); // TODO: set charset return;
		 */
	}
	return null;
}