Java Restful Spring中的后参数不工作
我有一个最小的基于Spring的Restful服务器,它使用以下方法Java Restful Spring中的后参数不工作,java,android,spring,rest,spring-mvc,Java,Android,Spring,Rest,Spring Mvc,我有一个最小的基于Spring的Restful服务器,它使用以下方法 @RequestMapping("/regUser") public @ResponseBody String addUser( @RequestParam(value="name", required=true) String username, @RequestParam(value="email", requi
@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线程
那么,发生了什么?
首先,我得到的信息是:
错误,所需的字段名不存在
如果我将表单required=true切换为required=false,则我得到的短消息为true,服务器报告以下短消息:
+++++++++++++++
USER: null | email: null | newsletter: null
+++++++++++++++
如何使用POST将所需参数发送到服务器
感谢你们所有人的帮助 如果您创建一个参数映射,然后调用restfull服务,该怎么办
Map<String, String> params = new HashMap<String, String>();
//add params
params.put("name", "the name");
params.put("email", "the email");
params.put("newsletter", "the newsletter");
//call service method
String result = tmpl.getForObject(url, String.class, params);
根据这些建议,我找到了另一个教程,它正是我想做的
使用本教程,一切都按照我希望的方式进行 您发送的是JSON而不是参数…我如何更改它?您不能使用当前设置。不要映射到JSON。或者修复服务器,使其能够接收JSON而不是参数。好的。谢谢,这至少是解决这个问题的一种新方法。…@M.Deinum谢谢你的建议帮助我解决了这个问题地图没什么区别。同样的行为,同样的问题。