Spring Android - POST 请求 - URL 来自 Class 对象的编码参数
Spring Android - POST Request - URL Encoded Params from Class Object
我正在尝试 在 Android Spring POST 请求 中发送一些键值对。它工作正常,如果我是使用
MultiValueMap<String, String> map= new LinkedMultiValueMap<String, String>();
为此。 有什么方法可以避免 MultiValueMap 并直接发送 Class 对象作为请求。
找到的一个解决方案是使用 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);
当 post 使用 FormHttpMessageConverter
连接媒体类型 APPLICATION_FORM_URLENCODED
时,您必须使用 MultiValueMap
,如 here 所示。或者,如果你想 post JSON,内部使用 Jackson 将任何对象 class 转换为 JSON 输出。 Spring 使用消息转换器来确定如何 read/write 对象,以及哪些类型与哪些媒体类型兼容。
我正在尝试 在 Android Spring POST 请求 中发送一些键值对。它工作正常,如果我是使用
MultiValueMap<String, String> map= new LinkedMultiValueMap<String, String>();
为此。 有什么方法可以避免 MultiValueMap 并直接发送 Class 对象作为请求。
找到的一个解决方案是使用 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);
当 post 使用 FormHttpMessageConverter
连接媒体类型 APPLICATION_FORM_URLENCODED
时,您必须使用 MultiValueMap
,如 here 所示。或者,如果你想 post JSON,内部使用 Jackson 将任何对象 class 转换为 JSON 输出。 Spring 使用消息转换器来确定如何 read/write 对象,以及哪些类型与哪些媒体类型兼容。