繁体   English   中英

curl 到 RESTapi 指定 queryParam、pathParam 和 formData

[英]curl to RESTapi specifying queryParam, pathParam and formData

我正在编写一个包含 API 的 RestController,它应该将 QueryParam、PathParam 和 FormData 作为输入。 我给你看代码:

@ApiResponses(value = { @ApiResponse(code = 403, message = "Forbidden/Request Unauthorized"),
        @ApiResponse(code = 412, message = "Client Error"),
        @ApiResponse(code = 500, message = "Internal server error"),
        @ApiResponse(code = 200, message = "Request accepted") })
@ApiOperation(httpMethod = "POST", value = "Some description", tags = {
        "some tag" }, notes = "some note")
@RequestMapping(method = { RequestMethod.POST }, value = { "/foo/bar/{id}" }, produces = {
        "application/json" }, consumes = { "application/json" })
public ResponseEntity moveDPO(@PathVariable(value = "id") String id,
        @RequestParam(value = "endpoint") @ApiParam(required = true, allowEmptyValue = false, example = "https://endpoint.com") String endpoint,
        @RequestPart(value = "json") String json)

如您所见,这里我有三个参数:

  • id -> 路径参数
  • 端点 -> 查询参数
  • json -> formData(它是一个 json)

我试图以这种方式用 curl 调用这个 RESTapi

curl -d 'json={"key1":"value1", "key2":"value2", ...}' https://mydomain/foo/bar/3541832?endpoint=https://someendpoint.com -H "Authorization: basic dXNlcjpwYXNzd29yZA==" -H "content-type: application/json" 

但是,当我尝试时,我得到的是以下错误:

{"timestamp":"2020-08-20T14:45:36.940+0000","status":500,"error":"Internal Server Error","message":"Failed to parse multipart servlet request; nested exception is javax.servlet.ServletException: org.apache.tomcat.util.http.fileupload.impl.InvalidContentTypeException: the request doesn't contain a multipart/form-data or multipart/mixed stream, content type header is application/json","path":"/foo/bar/3541832"}

我不知道如何让它工作。 为什么 RESTapi 需要多部分/表单数据? 是因为@RequestPart 注解?

谢谢你。

我解决了。 基本上,有三个错误:

  • 第一个, -d选项指的是正文。 就我而言,我想将数据作为 formData 发送,因此-F (或--form )是正确的选项
  • 其次,queryParam 没有经过 url 编码
  • 第三,content-type必须是"content-type: multipart/form-data"

最终正确的curl如下:

curl -F 'json={"key1":"value1", "key2":"value2", ...}' https://mydomain/foo/bar/3541832?endpoint=https%3A%2F%2Fsomeendpoint.com -H "Authorization: basic dXNlcjpwYXNzd29yZA==" -H "content-type: multipart/form-data"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM