当前位置: 首页 > 知识库问答 >
问题:

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

糜运良
2023-03-14

我有一个无法更改的spring API,它的post listener如下所示:

@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;
     }
 }

当执行上述post请求时,它会从我这边引发异常

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

当使用JSON/application从邮递员发帖时,错误是必需的字符串参数“x”不存在。

然而,当x和y在params中而不是在body中时,它会从postman成功发送。

此外,当我在Spring将其硬编码为post请求中url的一部分时,它也是成功的

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

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

共有2个答案

韩麒
2023-03-14

我认为您误解了@RequestParam的用法。变量应位于url中(/上传?x=测试

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

@PostMapping("upload")
public String register(@RequestBody MyObj myObj) {//dostuff}
王刚毅
2023-03-14

用作RequestParam的参数是查询参数,不能像您所做的那样在requestBody中传递。它们需要动态附加到url。这可以通过以下方式实现。

  String url = baseUrl + "/upload?x={x}&y={y}";

  Map<String, String> uriVariables = new HashMap();
  uriVariables.put("x", "valueForX");
  uriVariables.put("y", "valueForY");

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

在这里,RequestBody是可以为null的,因为您的API不接受任何RequestBody,所以它被指定为null。

postForObject方法的文档可以在这里找到。

您甚至可以使用Spring的UriBuilder来构建一个带有queryParams的url。更多信息可以在这里找到它的留档。

 类似资料:
  • 我想从我的Android应用程序向Spring Boot发送post请求。我使用okhttp以JSON格式发送HTTP post请求。代码如下: 每次我使用Android请求发送post请求时,我都会收到400个错误的请求参数“name”不存在,“path”:“/newcustomer”。但当我使用postman时,它可以工作。

  • 在从Tomcat 7.0.50升级到Tomcat 8.5.15期间,它停止识别我的一个方法的POST参数:我得到的不是正常的响应,而是以下消息 HTTP状态[400]-[错误请求] 类型状态报告 消息所需字符串参数'password'不存在 由于被认为是客户端错误(例如,格式错误的请求语法、无效的请求消息帧或欺骗性的请求路由),服务器无法或将不处理请求。 Apache Tomcat/8.5.15

  • 我无法通过邮递员提出请求,我检查了所有内容,我的电子邮件在我的数据库中表示为varchar(255)。我使用后格雷姆。错误:必需的字符串参数“电子邮件”不存在。我使用响应并像这样设置它:每个接收值的字符串参数,但这没有帮助,因为程序报告我们没有发送任何东西。这与什么有关?请求是正确的,以及接受的参数是正确的。 请求看起来像什么: 实体用户 接受的控制器: 回购: 添加日志

  • 我尝试在Spring MVC中对我的控制器进行AJAX查询。 我的操作代码是: 我的Ajax查询是: 但我有个错误: 必需的字符串参数“start_date”不存在 为什么?正如我所知,我像一样呈现了它 和控制器操作: JSON数据如下:

  • 我知道很多人问过相关的问题,但请帮我解决。我试图复制一个我在网上找到的开源温度控制实验室。我想在树莓皮上运行它。这就是我一直遇到的错误: 生成它的代码如下所示: 我相信这段代码试图通过以下代码与另一个python文件通信: 我还不知道我周围的python代码,所以一个非常清晰的“虚拟类”解决方案的解释会很有帮助。谢谢伙计们。

  • 我正在使用SpringMVC编写一个Web应用程序。在我的jsp中是一个表单,内容与Ajax一起发送到我的控制器。映射方法的简化代码如下所示: 我已将CustomDateEditor注册到: 当表单输入中的字符串正确时,不会抛出异常。问题是,当日期的输入为空或包含无法转换为日期的字符串时,我会得到异常:< code >所需的日期参数' createdTo '不存在。 我甚至编写了自己的DateEd