java - swagger-ui 中的 OPTIONS、HEAD、PATCH 方法,但在 RestController 中没有
问题描述
我是使用 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);
}
}
这是我的 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();
}
}
解决方案
像这样改变你的功能。
@RequestMapping(path="/timesheets",method=RequestMethod.GET)
public List<Timesheet> getTimesheets() {
List<Timesheet> results = new ArrayList<>();
timeRepo.findAll().forEach(results::add);
return results;
}
甚至将其更改为@GetMapping("/timesheets")
这一个与this issue类似。
推荐阅读
- javascript - 使用 Javascript 创建 Outlook 电子邮件并格式化电子邮件正文
- c++ - 半精度 PyTorch 浮点张量与单精度浮点张量具有相同的性能吗?
- c - C:计算出的机器 epsilon 与 limits.h 不同
- themes - 如何在 Blazor Web 程序集中集成主题森林主题?
- excel - Excel:查找一个值并指示它是否在其他地方使用 INDEX/MATCH
- reactjs - 您将如何重置 onClick 的无线电输入?反应式
- regex - 正则表达式字母之间任意数量的 _
- visual-studio-code - VS代码查找和替换:选择多行时替换选择会产生意外结果?
- python - 如何从 .txt 文件中提取数据并将其存储在 2 个单独的变量中?
- python - Pandas - 将数据集行从每个人更改为每个操作的最简单方法