必需的字符串参数'x'不存在

时间:2019-05-09 15:17:35

标签: java spring spring-boot spring-mvc

我有一个无法更改的spring API,它的帖子监听器看起来像这样:

@PostMapping("upload")
    public String register(@RequestParam("x") String x, 
@RequestParam("y") String y) {//dostuff}

现在我身边还有另一个Spring-boot API,需要在构造时发送POST请求,并且该POST请求看起来像这样:

  String response = 
(String) rest.postForObject(url,objectWrapper,String.class);

和ObjectWrapper看起来像这样:

public class ObjectWrapper {
   private String x;
   private String y;

  public ObjectWrapper(String x, String y) {
      this.x= x;
      this.y = y;
     }
 }

执行以上发布请求时,它会抛出异常

org.springframework.web.client.HttpClientErrorException $ BadRequest:400空

使用JSON /应用程序从邮递员发布时,错误是必需的,字符串参数'x'不存在。

但是,当x和y处于参数而不是正文中时,它将成功地从邮递员发送出去。

当我在Spring中将其作为帖子请求中url的一部分进行硬编码时,也会成功

  url + "/upload?x=test&y=test"

我的问题是,如何通过Post请求将两个字符串从我的Spring服务器发送到另一个服务器。我无法更改监听器。预先感谢。

2 个答案:

答案 0 :(得分:1)

我认为您误解了@RequestParam的用途。这些变量应放置在url中(/ upload?x = test&y = test可以),而不是在正文中。

如果要将此变量放在正文中,请选择一种格式(例如JSON),创建一个对象,将json放在正文中,然后将该对象标记为@RequestBody:

$ for in in AAAL*
  do                              # for example       AAAL_555A_ORANGE1_F190404.TXT
      out=${in#*_}                # remove AAAL_        -> 555A_ORANGE1_F190404.TXT
      out=${out%_*}               # remove _F190404.TXT -> 555A_ORANGE1
      out=${out%[0-9]}            # remove 1            -> 555A_ORANGE
      cat $in >> AAAI_$out.txt
  done
$ ls -1 AAAI*
AAAI_555A_MANGO.txt
AAAI_555A_ORANGE.txt
AAAI_555B_APPLE.txt
AAAI_555B_Orange.txt
AAAI_555B_ORANGE.txt

答案 1 :(得分:1)

用作if (strstr($bo, $pi)) { echo "<tr>"; echo "<td>" . preg_match($ip, $body) . "</td>"; echo "</tr>"; $count++; } 的参数是查询参数,不能像您所做的那样在requestBody中传递。需要将它们动态地附加到url。可以通过以下方式完成。

@RequestParam

此处RequestBody可为空,并且由于您的API不接受任何requestBody,因此将其指定为null。

postForObject 方法的文档可以在here中找到。

您甚至可以使用Spring的 UriBuilder 来构建带有queryParams的网址。有关更多信息,请参见其文档here