我有一个无法更改的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服务器发送到另一个服务器。我无法更改监听器。预先感谢。
答案 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。