Springfox Swagger генерирует поля не в сигнатуре метода - PullRequest
0 голосов
/ 02 июля 2019

Я включил Springfox Swagger для моего приложения весенней загрузки. Вот код настройки

SwaggerConfig

@Configuration
@EnableSwagger2
public class SwaggerConfig
{
    @Bean
    public Docket api()
    {
        return new Docket(DocumentationType.SWAGGER_2).select()
                .apis(RequestHandlerSelectors.withClassAnnotation(RestController.class))
                .paths(PathSelectors.ant("/api/**")).build().apiInfo(metaData());
    }

    private ApiInfo metaData()
    {
        ApiInfo apiInfo = new ApiInfo("myApp REST API", "REST APIs for myApp", "1.0.0", "", new Contact("", "", ""), "Proprietary", "", Collections
                .emptyList());
        return apiInfo;
    }
}

Вот мой контроллер

@RequestMapping("/api/user")
@RestController
public class UserApiController
{
    @Autowired
    UserService userService;

    @Secured(value = { "ROLE_ADMIN", "PERMISSION_LIST_USERS" })
    @GetMapping(value = "/list", produces = "application/json")
    List<UserBO> listUsers(HttpSession session)
    {
        Long companyId = (Long) session.getAttribute("companyId");
        List<UserBO> users = userService.listUsers(companyId);
        return users;
    }

    @Secured(value = { "ROLE_ADMIN", "PERMISSION_USER_CREATE" })
    @PostMapping("/create")
    ResponseEntity<String> createUser(@RequestParam String login, @RequestParam String password, @RequestParam String firstName, @RequestParam String lastName, @RequestParam Long usergroupId, HttpSession session)
    {
        Long companyId = (Long) session.getAttribute("companyId");
        ResponseEntity<String> response = userService
                .createUser(login, password, firstName, lastName, usergroupId, companyId);
        return response;
    }

    ...
    ...
    ...
}

Вот чванство, которое я вижу

enter image description here

Существует множество других параметров, которых нет в сигнатуре метода ( creationTime, lastAccessedTime и т. Д.).

Почему Swagger генерирует их и как мне предотвратить это, и в сигнатуре метода генерируются только параметры?

Ответы [ 2 ]

0 голосов
/ 02 июля 2019

Я наконец понял, как @AlanHay указал, что другие параметры показывали, потому что объект HttpSession был в сигнатуре метода, и чтобы игнорировать это, я должен был использовать аннотацию @ApiIgnore для HttpSession параметр в сигнатуре метода.

Таким образом, метод будет

@Secured(value = { "ROLE_ADMIN", "PERMISSION_LIST_USERS" })
@GetMapping(value = "/list", produces = "application/json")
List<UserBO> listUsers(@ApiIgnore HttpSession session)
{
    Long companyId = (Long) session.getAttribute("companyId");
    List<UserBO> users = userService.listUsers(companyId);
    return users;
}
0 голосов
/ 02 июля 2019

Попробуйте добавить конфигурацию Docket bean:

    @Bean
    public Docket api() {
        return new Docket(DocumentationType.SWAGGER_2)
            .select()
            .apis(RequestHandlerSelectors.basePackage("com.example.springbackend.controller"))
            .paths(PathSelectors.regex(".*"))
            .build()
            .apiInfo(metaData());
     }
...