0

Android から Spring Java サーバーに JSONArray を渡そうとしています。

私はすでに2つの方法を試しました。1 つは、JSONArray を String として渡し、@PathVariable アノテーションでキャッチすることです。

この方法で [{"id":6,"numDishes":1,"observations":"false"},{"id":2,"numDishes":3,"observations":"false"}] を取得できますそして、私はそれをこのように機能させることができると思います。

これに使用するコードは次のとおりです。

アンドロイドで

HttpGet request = new HttpGet(serverURL + action);//action already has two params
HttpResponse response = httpclient.execute(target, request);

サーバーに到着 /orderService/addOrder/1/[{"id":6,"numDishes":1,"observations":"false"},{"id":2,"numDishes":3,"observations": "間違い"}]

@RequestMapping(method=RequestMethod.GET, value="/addOrder/{tableNumber}/{jsonParam}")
public void addOrder(@PathVariable Integer tableNumber, @PathVariable String jsonParam) {
    log.info("String encoded: " + jsonParam);
}

とにかく、私は直接それをしたいと思います。何かのようなもの

アンドロイド

HttpPost request = new HttpPost(serverURL + action + URLEncoder.encode(paramsString, "UTF-8"));

request.setHeader("Accept", "application/json");
request.setHeader("Content-type", "application/json");
HttpResponse response = httpclient.execute(target, request);

サーバ

public class OrderPojo extends ArrayList<DishPojo>{}
    @RequestMapping(method=RequestMethod.POST, value="/addOrderPost/{tableNumber}/{jsonParam}")
    public void addOrderPost(@PathVariable Integer tableNumber, @RequestBody OrderPojo jsonParam) {
        log.info("addOrderPost OrderPojo: " + jsonParam);
    }

また、それが問題の一部である可能性があると思うので、Spring-Servlet 内にこれがあります。

<bean id="jacksonMessageConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"/>
    <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
        <property name="messageConverters">
          <list>
            <ref bean="jacksonMessageConverter"/>
          </list>
        </property>
    </bean> 

    <mvc:annotation-driven/>

私は正しい道にいますか?オブジェクトをサーバー内のカスタム オブジェクトに直接解析するにはどうすればよいですか?

4

1 に答える 1

1

ここに解決策があります

    //Android Client. Calling the server
    List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(1);
    JSONObject jo = new JSONObject();
    jo.put("x1", UtilSettings.getTableNumberPreference(context));
    jo.put("x2", createJSONObject());
    nameValuePairs.add(new BasicNameValuePair("xxx", jo.toString()));

     StringEntity en = new StringEntity(nameValuePairs.get(0).getValue());
     en.setContentEncoding(new BasicHeader(HTTP.CONTENT_ENCODING, HTTP.UTF_8));
     en.setContentType("application/json");
     request.setEntity(en);
     request.setHeader(HTTP.CONTENT_TYPE, "application/json");
     HttpResponse response = httpclient.execute(target, request);
     result = EntityUtils.toString(response.getEntity());

    //Server side
    public class Object1Pojo{
        private Integer x1;
        private List<DishPojo> x2;
    }

    public class Object2Pojo {
        private String x1;
        private String x2;
        private String x3;
    }

    @RequestMapping(method=RequestMethod.POST, value="/addObjectPost", consumes="application/json")
    public @ResponseBody void addObjectPost(@RequestBodyObject1Pojo o1) {
        log.info(o1);
    }


//XML
<mvc:annotation-driven>
        <mvc:message-converters>
            <!-- converts @ResponseBody String return types into the response body -->
            <bean id="stringHttpMessageConverter" class="org.springframework.http.converter.StringHttpMessageConverter"/>

            <!-- standard form encoding -->
            <bean id="formHttpMessageConverter" class="org.springframework.http.converter.FormHttpMessageConverter"/>   

            <bean id="jacksonMessageConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
                <property name="supportedMediaTypes" value="application/json" />
            </bean>                                                             

        </mvc:message-converters>
    </mvc:annotation-driven>

    <!-- <bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" /> -->
    <bean id="jsonViewResolver" class="org.springframework.web.servlet.view.json.MappingJacksonJsonView" />
    <bean id="viewResolver" class="org.springframework.web.servlet.view.BeanNameViewResolver" />
于 2013-05-12T17:56:34.490 に答える