Spring Android - POST请求 - 来自类对象的URL编码参数

时间:2017-02-14 07:39:29

标签: java android http-post spring-android

我正在尝试在Android Spring POST请求中发送一些键值对。如果我正在使用

,它可以正常工作

MultiValueMap<String, String> map= new LinkedMultiValueMap<String, String>();

为此。 有没有办法避免MultiValueMap&amp;直接发送类对象作为请求

找到的一个解决方案是使用Reflection,如下所示

for (Field field:objAuth.getClass().getDeclaredFields()){
                    field.setAccessible(true);
                    map.add(field.getName(),field.get(objAuth)+"");
                }

代码段

        RestTemplate restTemplate = new RestTemplate(true);
        restTemplate.getMessageConverters().add(new FormHttpMessageConverter());
        restTemplate.getMessageConverters().add(new MappingJacksonHttpMessageConverter());
        restTemplate.getMessageConverters().add(new StringHttpMessageConverter());


        HttpHeaders requestHeaders = new HttpHeaders();
        requestHeaders.setContentType(MediaType.APPLICATION_FORM_URLENCODED);

        MultiValueMap<String, String> map= new LinkedMultiValueMap<String, String>();
        Authenticate objAuth = new Authenticate();
        objAuth.setUserId("1");
        objAuth.setType("Type");
        objAuth.setoAuthToken("00112233");
        objAuth.setResponseCode("9689");
        objAuth.setResponseMessage("Last Message");

        /**
         * Using Reflection
         */
        for (Field field:objAuth.getClass().getDeclaredFields()){
            field.setAccessible(true);
            map.add(field.getName(),field.get(objAuth)+"");
        }

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

        String response = restTemplate.postForObject("http://posttestserver.com/post.php",requestEntity, String.class);

1 个答案:

答案 0 :(得分:0)

使用APPLICATION_FORM_URLENCODED发布媒体类型FormHttpMessageConverter时,您必须使用MultiValueMap,如here所示。或者,如果要发布JSON,则在内部使用Jackson将任何对象类转换为JSON输出。 Spring使用消息转换器来确定如何读/写对象,以及哪些类型与哪些媒体类型兼容。