如何在swagger-ui中获取POST数据?

时间:2018-05-28 08:15:38

标签: java spring-boot swagger swagger-ui swagger-2.0

我在SpringBoot应用程序中配置了swagger-ui。

以下是我的代码

public class Application extends SpringBootServletInitializer {

public static void main(String[] args) {
    SpringApplication.run(Application.class, args);
    openAppUrl("8080/swagger-ui.html");
}

public static void openAppUrl(String port) {
    String url = "http://localhost:" + port;
    String os = System.getProperty("os.name").toLowerCase();
    Runtime rt = Runtime.getRuntime();

    try {

        if (os.indexOf("win") >= 0) {
            rt.exec("rundll32 url.dll,FileProtocolHandler " + url);
        } else if (os.indexOf("mac") >= 0) {
            try {
                rt.exec("open " + url);
            } catch (IOException e) {
                System.out.println(e);
            }
        } else if (os.indexOf("nix") >= 0 || os.indexOf("nux") >= 0) {

            String[] browsers = { "epiphany", "firefox", "mozilla", "konqueror", "netscape", "opera", "links",
                    "lynx" };
            StringBuffer cmd = new StringBuffer();
            for (int i = 0; i < browsers.length; i++)
                cmd.append((i == 0 ? "" : " || ") + browsers[i] + " \"" + url + "\" ");

            rt.exec(new String[] { "sh", "-c", cmd.toString() });

        } else {
            return;
        }
    } catch (Exception e) {
        return;
    }
    return;
}
}

我的控制器

package com. server.spring.controller;

    import java.util.List;

    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.http.MediaType;
    import org.springframework.web.bind.annotation.RequestBody;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.bind.annotation.RestController;

    import com. server.spring.domain.User;
    import com. server.spring.service.UserService;


    @RestController
    @RequestMapping(UsersController.ROOT_RESOURCE_PATH)
    public class UsersController {

        public static final String ROOT_RESOURCE_PATH = "/rest/secure/v1/users";

        @Autowired
        private UserService userService;


        @RequestMapping(value = "/list", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
        public List<User> getUsers() {
            return userService.getAllUsers();
        }

        @RequestMapping(value = "/create", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE)
        public User createUser(@RequestBody User user) {
            return userService.saveUser(user);
        }
    }

enter image description here

这里显示了Rest API URL,HTTP方法POST,响应JSON对象。但我没有看到API调用中预期的POST数据Obj。因此,如果没有这个,前端开发人员就无法使用相应的API。

所以我希望显示POST Data JSON对象这个REST Api从前端应用程序需要什么

这是正确的方法还是我需要修改它以获得预期的方式?

2 个答案:

答案 0 :(得分:1)

您正在使用旧版本的Swagger-ui,看起来像2.x
最新版本更容易理解,请在此处查看:
http://petstore.swagger.io/#/pet/addPet
这听起来像是你给其他开发人员(前端开发人员),在这种情况下我强烈建议你寻找升级的方法,新版本有更好的用户体验,2.x UI版本是不再支持。

所以回答你的问题:

  

如何在swagger-ui中获取POST数据?

您可以通过swagger-ui的[try-it-out]按钮获得实际响应。
API所期望的POST数据Obj就是您在示例中看到的。

答案 1 :(得分:0)

通过在模型上使用示例(Techincally,API模型属性),我获得了模型属性以正确附加到正文。但是,我对此的经验不包括Spring,我确信文档类似。您需要在@ApiModelProperty课程中添加User注释。

public class User {
  private String firstName;
  private String lastName;

  @ApiModelProperty(value = "User's first name.", example = "John")
  public String getFirstName(){}
  //...setters

  @ApiModelProperty(value = "User's last name.", example = "Smith")
  public String getLastName(){}
  //...setters

  // etc
}

这会使用example字符串填充swagger文档POST / PUT / etc正文。