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

所需的字符串参数不存在

微生慈
2023-03-14

我想从我的Android应用程序向Spring Boot发送post请求。我使用okhttp以JSON格式发送HTTP post请求。代码如下:

每次我使用Android请求发送post请求时,我都会收到400个错误的请求参数“name”不存在,“path”:“/newcustomer”。但当我使用postman时,它可以工作。

    Java
    ----------------------------------------------------------------
    Log.d("okhttphandleruserreg", "called");
    MediaType JSON = MediaType.parse("application/json; charset=utf-8");
    JSONObject jsonObject = new JSONObject();
    try{
        jsonObject.put("name", name);
        jsonObject.put("email", email);
        jsonObject.put("username", username);
        jsonObject.put("password", password);
        jsonObject.put("month", month);
        jsonObject.put("dayOfMonth", dayOfMonth);
    } catch (JSONException e) {
        e.printStackTrace();
    }
    RequestBody body = RequestBody.create(JSON, jsonObject.toString());

    Request.Builder builder = new Request.Builder();
    builder.url(params[0]);
    builder.post(body);
    Request request = builder.build();

    Spring Boot
    -----------------------------------------------------------------
    @RequestMapping(value = "/newcustomer", method= RequestMethod.POST)
    public Customer newCust(@RequestParam(value="name") String name,
                        @RequestParam(value="email") String email,
                        @RequestParam(value="username") String username,
                        @RequestParam(value="password") String password,
                        @RequestParam(value="month") int month,
                        @RequestParam(value="dayOfMonth") int dayOfMonth
)

共有2个答案

巫马盛
2023-03-14

您在Spring Boot中使用Request Params,但在Android代码中,您将其作为请求正文发送。

请更改以上任何一项。如果在这两个地方都使用RequestBody,效果更好。

class Customer
{
String name:
String email:
String username;
String password;
int month;
int dayofthemonth;

//getter and setters
}

public Customer newCust(@RequestBody Customer newcustomer)
{
}
徐俊楚
2023-03-14

实现后端 /newcustomerAPI的方式表明,您希望请求有效负载是请求表单数据中的原始请求参数

假设服务器端API是您的合约,因此应保持原样,您的客户端代码应更新如下:

Log.d("okhttphandleruserreg", "called");

// here you create your request body as as a Form one
RequestBody formBody = new FormBody.Builder()
  .add("name", "test")
  .add("email", "test@domain.com")
  .add("username", "test")
  .add("username", "test")
  .add("month", "january")
  .add("dayOfMonth", "1")
  .build();

Request request = new Request.Builder()
  .url(params[0])
  .post(formBody)
  .build();

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

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

  • 我有一个无法更改的spring API,它的post listener如下所示: 现在,我有另一个Spring boot API,需要在构建时发送POST请求,POST请求如下所示: ObjectWrapper如下所示: 当执行上述post请求时,它会从我这边引发异常 org.springframework.web.client.HttpClientErrorException$BadReques

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

  • 所以,我知道这可能是一个非常愚蠢的问题,我是一个初学者,试图学习Java基础知识,我有一个字符串数组的问题,我不太明白。当我尝试将单词输入到字符串数组中,并且单词的数量由用户设置(例如5)时,我总是可以少输入一个单词(例如4而不是5)。我的代码在下面。