Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/185.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用spring for android的rest POST对象_Java_Android_Spring_Rest - Fatal编程技术网

Java 使用spring for android的rest POST对象

Java 使用spring for android的rest POST对象,java,android,spring,rest,Java,Android,Spring,Rest,我正在尝试使用spring for android发布rest服务(我是新手) restful服务具有这种结构 @POST @Path("/ider") @Consumes(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON) public SearchOutRO hashTrackInJSON(SearchInRO in); 使用(缩短的目标代码): 所以我正在尝试这个(来自android) 你能帮我指出我做错了什

我正在尝试使用spring for android发布rest服务(我是新手)

restful服务具有这种结构

@POST
@Path("/ider")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public SearchOutRO hashTrackInJSON(SearchInRO in);
使用(缩短的目标代码):

所以我正在尝试这个(来自android)

你能帮我指出我做错了什么吗?(以及如何改正)。
我认为这可能是“身体”多值映射的结果

提前谢谢

编辑:我尝试了@Krisl的建议。我成功地连接到服务器端,但对象似乎没有正确编组

WARNING: javax.xml.bind.UnmarshalException
 - with linked exception:
[javax.xml.bind.UnmarshalException: unexpected element (uri:"", local:"latitud"). Expected elements are <{}searchInRO>]
警告:javax.xml.bind.UnmarshalException
-除此之外:
[javax.xml.bind.UnmarshaleException:意外元素(uri:,local:“latitud”)。预期元素为]

如果有任何想法,我将不胜感激

我认为您缺少
HttpMessageConverter
bean。如果您正在生成和使用JSON数据,那么应该有某种方法将JavaPOJO转换为JSON,反之亦然。 尝试在上下文xml文件中添加以下bean

<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>

此外,还需要为jackson映射器添加maven依赖项

<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>

org.codehaus.jackson
jackson core asl
1.8.5
org.codehaus.jackson
杰克逊地图绘制者
1.8.5

看来您的假设是正确的,多值映射是造成问题的原因

试试这个

在SearchInRO对象中设置lat和lng并添加,而不是使用多值映射

改变

HttpEntity<?> requestEntity = new HttpEntity<Object>(body, requestHeaders);
设置lat和lng

HttpEntity<?> requestEntity = new HttpEntity<Object>(searchInRO , requestHeaders);
更新: 我刚刚检查了一个使用REST的旧项目,发现我也使用了jersey json jar(我的case maven依赖项)。
尝试将jersey json jar添加到类路径并更新web.xml,如下所示

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

com.sun.jersey.api.json.POJOMappingFeature
真的

在设置HttpEntity之前,使用jackson和写入程序转到字符串的差异方法


您是否可以访问客户端的服务器端数据对象(
SearchInRO
SearchOutRO
)?是的,这两个对象都是本地实现的,您应该在客户端使用它们。创建一个
SearchInRO
对象,填充它,并将其存储到HttpEntity中,而不是多值映射。我也不认为您需要
FormHttpMessageConverter
。您的类路径中有jersey json jar吗?是的,我不知道到底是什么问题我尝试了这个,现在我得到了一个服务器错误“由:javax.xml.bind.UnmarshaleException:unexpected元素引起”。似乎无法封送到json类型。你的类路径中有jackson JAR吗?看看这个。看起来您在SearchInRO类中有XMl注释
HttpEntity<?> requestEntity = new HttpEntity<Object>(body, requestHeaders);
SearchInRO searchInRO = new SearchInRO();
HttpEntity<?> requestEntity = new HttpEntity<Object>(searchInRO , requestHeaders);
 messageConverters.add(new MappingJacksonHttpMessageConverter());
<init-param>
        <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
        <param-value>true</param-value>
    </init-param>
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));