Java swagger ui中的选项、头部、修补方法,但不在RestController中
我在使用Swagger方面是新手,我已经实现了一个SwaggerConfig类和一个RestController。 在我的RestController中,我只实现了GET、POST、PUT和DELETE,但swagger也为OPTIONS和HEAD生成了方法?原因是什么? 默认情况下,它们总是由Swagger生成的吗?产生这些方法的原因是什么? 提前谢谢Java swagger ui中的选项、头部、修补方法,但不在RestController中,java,spring,swagger,swagger-ui,Java,Spring,Swagger,Swagger Ui,我在使用Swagger方面是新手,我已经实现了一个SwaggerConfig类和一个RestController。 在我的RestController中,我只实现了GET、POST、PUT和DELETE,但swagger也为OPTIONS和HEAD生成了方法?原因是什么? 默认情况下,它们总是由Swagger生成的吗?产生这些方法的原因是什么? 提前谢谢 @RestController public class TimesheetRequestController { @Autowired
@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);
}
}
像这样改变你的功能
@RequestMapping(path="/timesheets",method=RequestMethod.GET)
public List<Timesheet> getTimesheets() {
List<Timesheet> results = new ArrayList<>();
timeRepo.findAll().forEach(results::add);
return results;
}
@RequestMapping(path=“/timesheets”,method=RequestMethod.GET)
公共列表getTimesheets(){
列表结果=新建ArrayList();
timeRepo.findAll().forEach(结果::add);
返回结果;
}
或者甚至将其更改为@GetMapping(“/timesheets”)
这一个与此类似。尽管它被称为REST,这是指4种基本操作,但REST客户端也通常使用HEAD和OPTIONS方法。因此,Swagger也会自动列出处理这些http方法的控制器方法 由于您尚未为此控制器方法定义任何方法参数:
@RequestMapping("/timesheets")
public List<Timesheet> getTimesheets() {
List<Timesheet> results = new ArrayList<>();
timeRepo.findAll().forEach(results::add);
return results;
}
@RequestMapping(“/timesheets”)
公共列表getTimesheets(){
列表结果=新建ArrayList();
timeRepo.findAll().forEach(结果::add);
返回结果;
}
。。。所有未被任何其他控制器方法接受的请求(因为更严格的匹配参数)都将重定向到此处。所以斯威格会列出它们
如果您不想允许HEAD和OPTIONS,那么将
@RequestMapping(“/timesheets”)
更改为@GetMapping(“/timesheets”)
将其更改为GetMapping,现在可以使用了。太多了
@RequestMapping("/timesheets")
public List<Timesheet> getTimesheets() {
List<Timesheet> results = new ArrayList<>();
timeRepo.findAll().forEach(results::add);
return results;
}