SpringBoot

RestTemplate Converter agrega FormHttpMessageConverter.java y StringHttpMessageConverter y ResourceHttpMessageConverter y ByteArrayHttpMessageConverter,

Cliente http Long en params: parts.add ("tiempo", tiempo);


org.springframework.http.converter.HttpMessageNotWritableException: Could not write request: no suitable HttpMessageConverter found for request type [java.lang.Long]
    at org.springframework.http.converter.FormHttpMessageConverter.writePart(FormHttpMessageConverter.java:422)
    at org.springframework.http.converter.FormHttpMessageConverter.writeParts(FormHttpMessageConverter.java:393)
    at org.springframework.http.converter.FormHttpMessageConverter.writeMultipart(FormHttpMessageConverter.java:373)
    at org.springframework.http.converter.FormHttpMessageConverter.write(FormHttpMessageConverter.java:277)
    at org.springframework.http.converter.FormHttpMessageConverter.write(FormHttpMessageConverter.java:95)
    at org.springframework.web.client.RestTemplate$HttpEntityRequestCallback.doWithRequest(RestTemplate.java:948)
    at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:733)
    at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:670)
    at org.springframework.web.client.RestTemplate.postForObject(RestTemplate.java:414)
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.MULTIPART_FORM_DATA);
headers.setAccept(Collections.singletonList(MediaType.APPLICATION_FORM_URLENCODED));
headers.setAcceptCharset(Collections.singletonList(CharsetUtil.CHARSET_UTF_8));
FileSystemResource zipFile = new FileSystemResource(new File(file.getAbsolutePath()));
MultiValueMap<String, Object> parts = new LinkedMultiValueMap<>();
Long time = System.currentTimeMillis();
parts.add("time", time);
parts.add("md5", SecureUtil.md5(time + "234234").toUpperCase());
parts.add("file", zipFile);
HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<>(parts, headers);

¿Qué HttpMessageConverter puede soportar Long?

0
Kevin Wu 27 sep. 2019 a las 04:33

1 respuesta

La mejor respuesta

De forma predeterminada, los siguientes convertidores de mensajes están habilitados en Spring:

ByteArrayHttpMessageConverter – converts byte arrays
StringHttpMessageConverter – converts Strings
ResourceHttpMessageConverter – converts org.springframework.core.io.Resource for any type of octet stream
SourceHttpMessageConverter – converts javax.xml.transform.Source
FormHttpMessageConverter – converts form data to/from a MultiValueMap<String, String>.
Jaxb2RootElementHttpMessageConverter – converts Java objects to/from XML (added only if JAXB2 is present on the classpath)
MappingJackson2HttpMessageConverter – converts JSON (added only if Jackson 2 is present on the classpath)
MappingJacksonHttpMessageConverter – converts JSON (added only if Jackson is present on the classpath)
AtomFeedHttpMessageConverter – converts Atom feeds (added only if Rome is present on the classpath)
RssChannelHttpMessageConverter – converts RSS feeds (added only if Rome is present on the classpath)

Al recibir una nueva solicitud, Spring usará el encabezado "Aceptar" para determinar el tipo de medio con el que necesita responder. En su caso, el FormHttpMessageConverter es el convertidor seleccionado por defecto en Spring, ya que ha especificado el contenido. type.When escribir datos multiparte, este convertidor usa otro HttpMessageConverters para escribir las respectivas partes MIME. FormHttpMessageConverter la clase no pudo encontrar un convertidor de mensajes para el tipo Long. Entonces podría intentar convertir Long en una cadena y asignarlo a la parte como:

                Long time = System.currentTimeMillis();
                parts.add("time", String.valueOf(time));
                parts.add("md5", SecureUtil.md5(time + "234234").toUpperCase());
                parts.add("file", zipFile);
                HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<>(parts, headers);

Doc

0
Ananthapadmanabhan 27 sep. 2019 a las 05:19