swagger-ui 中的 OPTIONS、HEAD、PATCH 方法

我是使用 Swagger 的新手我已经实现了一个 SwaggerConfig 类和一个 RestController。在我的 RestController 中,我只实现了 GET、POST、PUT、DELETE,但是 swagger 还生成了 OPTIONS 和 HEAD 的方法?这是什么原因?它们是否总是默认从 Swagger 生成?产生这些方法的原因是什么?提前致谢。


@RestController

public class TimesheetRequestController {



@Autowired

TimesheetRepository timeRepo;



@RequestMapping("/timesheets")

public List<Timesheet> getTimesheets() {


    List<Timesheet> results = new ArrayList<>();

    timeRepo.findAll().forEach(results::add);


    return results;

}


@PostMapping("/timesheets")

@ApiParam(type="Timesheet")

public ResponseEntity<Object> createTimesheetEntry(@RequestBody Timesheet timesheet) {


    Timesheet savedTimesheet = timeRepo.save(timesheet);


    URI location = ServletUriComponentsBuilder.fromCurrentRequest().path("/{id}")

            .buildAndExpand(savedTimesheet.getId()).toUri();


    return ResponseEntity.created(location).build();

}


@PutMapping("/timesheets")

public ResponseEntity<Object> getTimesheetEntry(@RequestBody Timesheet timesheet, @PathVariable long id) {


    Optional<Timesheet> timesheetOptional = timeRepo.findById(id);


    if (!timesheetOptional.isPresent())

        return ResponseEntity.notFound().build();


    timesheet.setId(id);


    timeRepo.save(timesheet);


    return ResponseEntity.noContent().build();


}


@GetMapping("/timesheets/{id}")

public Timesheet getTimesheetEntry(@PathVariable long id) {


    Optional<Timesheet> timesheet = timeRepo.findById(id);


    if (!timesheet.isPresent())

        throw new TimesheetNotFoundException("id-" + id);


    return timesheet.get();


}


@DeleteMapping("/timesheets/{id}")

public void deleteTimesheetEntry(@PathVariable long id) {

    timeRepo.deleteById(id);


}




}

http://img4.mukewang.com/6194a83700019b4e12621178.jpg

这是我的 Swagger 配置:


@Configuration

@EnableSwagger2

public class SwaggerConfig {


    @Bean

    public Docket api() {

        return new Docket(DocumentationType.SWAGGER_2)

                .select()

                .apis(RequestHandlerSelectors.basePackage("package_name"))

                .paths(PathSelectors.any())

                .build();

    }

}


慕少森
浏览 745回答 2
2回答

凤凰求蛊

像这样改变你的功能。@RequestMapping(path="/timesheets",method=RequestMethod.GET)public List<Timesheet> getTimesheets() {&nbsp; &nbsp; List<Timesheet> results = new ArrayList<>();&nbsp; &nbsp; timeRepo.findAll().forEach(results::add);&nbsp; &nbsp; return results;}甚至将其更改为 @GetMapping("/timesheets")这一个类似于这个问题。

浮云间

虽然它被称为 REST,它指的是 4 个基本操作,但 HEAD 和 OPTIONS 方法也常被 REST 客户端使用。所以 Swagger 也会自动列出处理这些 http 方法的控制器方法。并且因为您尚未为此控制器方法定义任何方法参数:@RequestMapping("/timesheets")public List<Timesheet> getTimesheets() {&nbsp; &nbsp; List<Timesheet> results = new ArrayList<>();&nbsp; &nbsp; timeRepo.findAll().forEach(results::add);&nbsp; &nbsp; return results;}...所有其他控制器方法(由于更严格的匹配参数)未采用的所有请求都将重定向到此处。所以 Swagger 将列出它们。如果您不想允许 HEAD 和 OPTIONS 然后更改@RequestMapping("/timesheets")为@GetMapping("/timesheets")
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java