【问题标题】:PostParamters in Restful Spring not workingRestful Spring中的PostParamters不起作用
【发布时间】: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


【解决方案1】:

如果你创建一个参数映射,然后调用你的 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);

【讨论】:

  • 地图没有区别。同样的行为,同样的问题。
【解决方案2】:

根据建议,我找到了另一个教程,它完全符合我的要求

http://johnathanmarksmith.com/spring/java/javaconfig/programming/spring%20java%20configuration/spring%20mvc/web/rest/resttemplate/2013/06/18/how-to-use-spring-resttemplate-to-post-data-to-a-web-service/

使用本教程,一切都按照我想要的方式工作!

【讨论】:

    猜你喜欢
    • 2015-10-29
    • 2016-02-05
    • 2017-02-12
    • 2015-09-07
    • 2016-02-03
    • 1970-01-01
    • 1970-01-01
    • 2017-12-22
    • 1970-01-01
    相关资源
    最近更新 更多