我如何在春季从curl -X请求获取参数?

时间:2019-02-27 06:23:07

标签: java rest spring-boot http curl

我在处理从curl请求到spring-boot应用程序的参数时遇到问题。

我的控制器发布方法:

@RequestMapping(value = "/cat", method = RequestMethod.POST, consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
public ResponseEntity addCat(@Valid @ModelAttribute NewCatRequest newCatRequest, BindingResult bindingResult) {
    System.out.println( newCatRequest);
    if (bindingResult.hasErrors()) {
        return ResponseEntity.badRequest().body(bindingResult.getFieldError().getDefaultMessage());
    }

    int rowsAffected = catsRepository.saveCat(newCatRequest.getName(), newCatRequest.getColor(), newCatRequest.getTail_length(), newCatRequest.getWhiskers_length());
    if (rowsAffected == 1) {
        return ResponseEntity.ok().body(newCatRequest);
    } else {
        return ResponseEntity.badRequest().body("There was an unexpected error while trying to create cat for you :(");
    }
}

问题是:当我尝试使用curl发送此邮件时:

  

curl -X POST http://localhost:8080/cat \   -d“ {\” name \“:\” Tihon \“,\” color \“:\” red&white \“,\” tail_length \“:15,\” whiskers_length \“:12}”

我在'newCatRequest'中具有所有空参数: NewCatRequest {name ='null',color ='null',tail_length = 0,whiskers_length = 0}

但是当我尝试对Postman做同样的事情(POST方法,带有我的参数的x-www-form-urlencode在体内)时,我得到一个有效的结果: Result from Postman

请帮助我了解问题所在。

3 个答案:

答案 0 :(得分:0)

您可以使用邮递员中发送按钮下方的代码选项来生成确切的卷曲请求,该请求将为您https://i.stack.imgur.com/hbk8M.png 在代码下拉菜单中搜索curl,它将为您生成一个整洁干净的curl请求。 希望对您有帮助

答案 1 :(得分:0)

尝试一下:

curl -X POST \
  http://localhost:8080/cat \
  -H 'Content-Type: application/x-www-form-urlencoded' \
  -d 'name=Thidon&color=red%20%26%20white&tail_length=15&whiskers_length=12'

您忘记了标题application/x-www-form-urlencoded,正文不应采用json格式。

答案 2 :(得分:0)

curl -X POST http://localhost:8080/cat \
     -d "{\"name\": \"Tihon\", \"color\": \"red & white\", \"tail_length\": 15, \"whiskers_length\": 12}"

上面的curl请求具有JSON正文,而您的请求处理方法

@RequestMapping(value = "/cat", method = RequestMethod.POST, consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)

消费/接受:application/x-www-form-urlencoded。因此,您应该将方法转换为使用/接受application/json或将curl请求更改为:

curl -X POST http://localhost:8080/cat \
     -d 'name=Tihon&color=red%20%26%20white&tail_length=15&whiskers_length= 12' \
     -H 'Content-Type: application/x-www-form-urlencoded'

编辑1

请注意,卷曲的默认 Content-Type application/x-www-form-urlencoded。要使用JSON,请将您的请求更改为:

curl -X POST http://localhost:8080/cat \
     -d "{\"name\": \"Tihon\", \"color\": \"red & white\", \"tail_length\": 15, \"whiskers_length\": 12}" \
     -H 'Content-Type: application/json'