【发布时间】:2015-09-09 12:48:29
【问题描述】:
我有一个最小的基于 Spring 的 Restful 服务器,带有以下希望公共的方法
@RequestMapping("/regUser")
public @ResponseBody String addUser( @RequestParam(value="name", required=true) String username,
@RequestParam(value="email", required=true) String email,
@RequestParam(value="newsletter", required=true) String newsletter){
User newUser = new User();
newUser.setEmail(email);
newUser.setUsername(username);
newUser.setReceiveNewsletter(true);;
System.out.println("+++++++++++++++");
System.out.println("USER: " + username + " | email: " + email + " | newsletter: " + newsletter);
System.out.println("+++++++++++++++");
userRepo.save(newUser);
return "true";
}
当我在浏览器中打开链接并在 URL 中使用 GET 提供所需参数时,一切正常。所以我认为问题出在下面的 Android 部分。
我想从我的 Android 设备调用上述方法。用户必须在三个 EditText 中输入所需的信息,然后按一个按钮将所有内容发送到 Restful 服务器。
@Override
protected UserWrapper doInBackground(String... params) {
try{
final String url = params[0];
RestTemplate tmpl = new RestTemplate();
tmpl.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
UserWrapper greet = tmpl.getForObject(url, UserWrapper.class);
for(User usr : greet.getUsers()){
Log.d("User", "Post - Name: " + String.valueOf(usr.getUsername()));
Log.d("User", "Post - eMail: " + String.valueOf(usr.getEmail()));
}
return greet;
}catch(Exception ex){
ex.printStackTrace();
}
return null;
}
这是我将所有内容发送到服务器的代码。我在 AsyncTask 中执行此操作,因为如果服务器需要更长的时间,则不会阻塞 Android 中的主 UI 线程。
那么,发生了什么? 首先我得到了消息:
错误,必填字段名称不存在。
如果我将表单requiered = true切换到requiered = false,我收到了“true”的短信,服务器上报如下短信:
+++++++++++++++
USER: null | email: null | newsletter: null
+++++++++++++++
如何使用 POST 将所需的参数发送到服务器?
感谢所有努力提供帮助的人!
【问题讨论】:
-
您发送的是 JSON 而不是参数...
-
我该如何改变呢?
-
您无法使用当前设置。不要映射到 JSON。或者修复服务器以便能够接收 JSON 而不是参数。
-
好的。谢谢,这至少是解决这个问题的一种新方法..
-
@M.Deinum 感谢您的建议帮助我解决了问题
标签: java android spring rest spring-mvc