当前请求不是多部分

时间:2016-10-26 04:27:54

标签: java spring rest swagger

我已经从Swagger API生成了一个Spring REST Web服务。 POST服务的代码如下所示

@javax.annotation.Generated(value = "class io.swagger.codegen.languages.SpringCodegen", date = "2016-10-24T09:36:32.738Z")

@Api(value = "addUser", description = "the addUser API")
public interface AddUserApi {

@ApiOperation(value = "Add an additional user", notes = "This service is used to add and additional user to the list of users.", response = Void.class, tags={  })
@ApiResponses(value = { 
    @ApiResponse(code = 200, message = "OK", response = Void.class),
    @ApiResponse(code = 200, message = "Unexpected error", response = Void.class) })
@RequestMapping(value = "/addUser",
    produces = { "application/json" }, 
    consumes = { "application/x-www-form-urlencoded" },
    method = RequestMethod.POST)
ResponseEntity<Void> addUserPost(


@ApiParam(value = "Unique id of the user to be added.", required=true ) @RequestPart(value="userId", required=true)  Integer userId,


@ApiParam(value = "Name of the user to be added.", required=true ) @RequestPart(value="name", required=true)  String name,


@ApiParam(value = "Profession of the user to be added.", required=true ) @RequestPart(value="profession", required=true)  String profession);

}

我使用内容类型“application / x-www-form-urlencoded”将数据发布到此服务。但是我面临的问题是,在发布时我收到了一个错误JSON作为响应,如下所示。

{
  "timestamp": 1477401894250,
  "status": 500,
  "error": "Internal Server Error",
  "exception": "org.springframework.web.multipart.MultipartException",
  "message": "The current request is not a multipart request",
  "path": "/UserManagement/rest/UserService/addUser"
}

根据我的知识,只有当我们从表单上传文件时才需要multipart,我不上传文件。我搜索过,每个结果都基于文件上传。我的招摇YAML如下。

swagger: '2.0'
info:
version: 1.0.0
title: Extended User Management API
description: >-
  This is communicate with an extended user management webservice to test the swagger API for learning
schemes:
   - http
basePath: /UserManagement/rest/UserService
host: '127.0.0.1:8089'
produces:
   - application/json
paths:
  /users:
     get:
       responses:
         '200':
            description: An array of users
            schema:
            type: array
            items:
              $ref: '#/definitions/User'
          default:
            description: Unexpected error
            schema:
              $ref: '#/definitions/Error'
   /addUser:
      post:
      summary: Add an additional user
      description: This service is used to add and additional user to the list of users.
      produces:
        - application/json
      consumes:
        - application/x-www-form-urlencoded
      parameters:
        - name: user_id
          in: query
          description: Unique id of the user to be added.
          required: true
          type: integer
          format: int32
        - name: name
          in: query
          description: Name of the user to be added.
          required: true
          type: string
        - name: profession
          in: query
          description: Profession of the user to be added.
          required: true
          type: string
      responses:
        '200':
           description: OK
        default:
           description: Unexpected error
           schema:
             $ref: '#/definitions/Error'
definitions:
  User:
    type: object
    properties:
      user_id:
        type: integer
        format: int32
        description: This is unique id that is assigned to each user.
      name:
        type: string
        description: This is the name of the user
      profession:
        type: string
        description: This is the profession that the user holds
  Error:
    type: object
    properties:
      code:
        type: integer
        format: int32
      message:
        type: string
      fields:
        type: string

有人请求帮助我并告诉我为什么我要面对这个问题以及如何解决这个问题。如果您需要任何其他详细信息来分析问题,请告知。

请求标题如下

{
  "Accept": "application/json"
}

编辑:

我尝试将消耗更改为“application / json”,我得到了如下所示的响应

{
  "timestamp": 1477464487595,
  "status": 415,
  "error": "Unsupported Media Type",
  "exception": "org.springframework.web.HttpMediaTypeNotSupportedException",
  "message": "Content type 'application/x-www-form-urlencoded' not supported",
  "path": "/UserManagement/rest/UserService/addUser"
}

请求标题在下面给出

{
  "Accept": "application/json"
}

1 个答案:

答案 0 :(得分:1)

您的映射包含 consumemes = {“application / x-www-form-urlencoded”} 表示它接受二进制的内容类型,将其更改为以下接受json数据类型

@RequestMapping(value = "/addUser",
    produces = { "application/json" }, 
    consumes = { "application/json" },
    method = RequestMethod.POST)
ResponseEntity<Void> addUserPost(..)