2014-11-14 2 views
1

Есть ли способ представить тело запроса сложного объекта в swagger с каждым полем, имеющим его вход?Swagger Spring mvc reponsebody

Простыми словами, если один из моих apis ожидает, что Person (предположим, что он имеет только имя/фамилия), как @RequestBody, тогда единственный способ предоставить этому человеку чванство - это дать весь json Person. Есть ли способ включить каждое отдельное поле для отдельного входа для имени/фамилии, например?

ответ

1

Если вы аннотировать операции с помощью @ModelAttribute он должен делать то, что вы ищете

Для например, вместо

public void updatePersonName(@RequestBody Person person) { ... } 

Используйте этот

public void updatePersonName(@ModelAttribute Person person) { ... } 

@ModelAttribute расширит примитивные свойства и обеспечивают поля для ввода в имени и фамилии в развязность ш. Эквивалентом этой операции является

public void updatePersonName(@RequestParam String firstName, 
          @RequestParam String lastName) { ... } 
+0

к сожалению, этого не происходит. Я поднял вопрос для этого также – Eugene

+0

Ссылка? Он должен работать с предупреждением о том, что ваши свойства модели должны быть * bean свойствами * с геттерами и сеттерами. –

+0

Что делать, если вместо сеттеров есть конструктор - класс неизменен. Это должно работать? – Eugene

0

Я также использую swagger с пользовательским интерфейсом swagger по умолчанию, и я не думаю, что это возможно, если вы не измените код пользовательского интерфейса swagger. Но довольно удобным решением является определение типа вашего параметра, а затем предоставление модели для этого типа. Например

"parameters": [ 
       { 
        "in": "body", 
        "name": "body", 
        "description": "A Person", 
        "required": true, 
        "type": "Person" 
       } 
      ] 

А потом

"definitions": { 
    "Person": { 
     "properties": { 
      "firstName": { 
       "type": "string" 
      }, 
      "lastName": { 
       "type": "string" 
      } 
     } 
     } 
    } 

Таким образом, модель появится в пользовательском интерфейсе, и вы легко можете скопировать его в текстовое поле тела запроса и заполнить его содержимым вручную.

+0

Ya если только там, где опция :) thx хотя – Eugene

Смежные вопросы