Resto objeto POST utilizando el resorte para android

Estoy tratando de POST a un servicio de descanso con la primavera de Android (soy nuevo en esto)

El servicio relajante tiene esta estructura

@POST @Path("/ider") @Consumes(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON) public SearchOutRO hashTrackInJSON(SearchInRO in); 

Con (código de objeto abreviado):

 public class SearchInRO implements Serializable { private Double latitud; private Double longitud; } public class SearchOutRO implements Serializable { private Integer searchId; } 

Así que estoy tratando esto (desde android)

 String url = BASE_URL + "ider"; HttpHeaders requestHeaders = new HttpHeaders(); requestHeaders.setContentType(MediaType.APPLICATION_JSON); MultiValueMap<String, String> body = new LinkedMultiValueMap<String, String>(); body.add("searchInRO[latitud]", String.valueOf(user.getLatitud())); body.add("searchInRO[longitud]", String.valueOf(user.getLongitud())); HttpEntity<?> requestEntity = new HttpEntity<Object>(body, requestHeaders); RestTemplate restTemplate = new RestTemplate(); List<HttpMessageConverter<?>> messageConverters = new ArrayList<HttpMessageConverter<?>>(); messageConverters.add(new FormHttpMessageConverter()); messageConverters.add(new StringHttpMessageConverter()); restTemplate.setMessageConverters(messageConverters); try { ResponseEntity<SearchOutRO> response = restTemplate.exchange(url, HttpMethod.POST, requestEntity, SearchOutRO.class); HttpStatus status = response.getStatusCode(); if (status == HttpStatus.CREATED) { return true; } else { return false; } } catch (Exception e) { e.printStackTrace(); return false; } 

Y obtener esta excepción:

 org.springframework.web.client.RestClientException: Could not write request: no suitable HttpMessageConverter found for request type [org.springframework.util.LinkedMultiValueMap] and content type [application/json] 

¿Podría ayudarme a señalar qué estoy haciendo mal? (Y cómo hacerlo bien).
Creo que puede el "cuerpo" MultiValueMap.

Gracias por adelantado

EDIT: He intentado lo que @Krisl sugirió. Tengo éxito para conectar con el lado del servidor, pero parece que el objeto no está correctamente organizado.

 WARNING: javax.xml.bind.UnmarshalException - with linked exception: [javax.xml.bind.UnmarshalException: unexpected element (uri:"", local:"latitud"). Expected elements are <{}searchInRO>] 

Apreciaría cualquier idea.

    Parece que su supuesto es correcto, MultiValueMap está causando el problema.

    Prueba esto

    En lugar de usar MultiValueMap, establezca el lat y lng en el objeto SearchInRO y agréguelo.

    Cambio

     HttpEntity<?> requestEntity = new HttpEntity<Object>(body, requestHeaders); 

    a

     SearchInRO searchInRO = new SearchInRO(); 

    Establecer el lat y lng

     HttpEntity<?> requestEntity = new HttpEntity<Object>(searchInRO , requestHeaders); 

    También agregue MappingJacksonHttpMessageConverter

      messageConverters.add(new MappingJacksonHttpMessageConverter()); 

    ACTUALIZACIÓN: Acabo de comprobar uno de mis proyectos antiguos que utiliza REST y me di cuenta de que usé jeris jersey-json también (mi caso maven dependencia).
    Pruebe este agregue jar de jersey-json a su classpath y actualice el web.xml como se indica a continuación

     <init-param> <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name> <param-value>true</param-value> </init-param> 

    Creo que le faltan HttpMessageConverter bean. Si está produciendo y consumiendo datos JSON, debe haber alguna forma de convertir POJO de Java a JSON y viceversa. Intente agregar el siguiente bean en su archivo xml del contexto.

     <beans:bean id="jacksonMessageChanger" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"> <beans:property name="supportedMediaTypes" value="application/json" /> </beans:bean> <beans:bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"> <beans:property name="messageConverters"> <util:list id="beanList"> <beans:ref bean="jacksonMessageChanger" /> </util:list> </beans:property> </beans:bean> 

    También necesitarías agregar dependencias de maven para los mapeadores de jackson.

     <dependency> <groupId>org.codehaus.jackson</groupId> <artifactId>jackson-core-asl</artifactId> <version>1.8.5</version> </dependency> <dependency> <groupId>org.codehaus.jackson</groupId> <artifactId>jackson-mapper-asl</artifactId> <version>1.8.5</version> </dependency> 

    Dif utilizando jackson con un escritor para ir a la cadena antes de establecer la HttpEntity …

    árbitro

     ObjectNode rootOb = new ObjectMapper().createObjectNode(); { create obj nodes , adding each to rootNode } {jackson api to go to string } StringWriter writer = new StringWriter(); new ObjectMapper().writeValue(writer, rootOb); String poststr=writer.toString(); httpPost.setEntity(new StringEntity(poststr)); 
    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.