Spring将@PathVariable绑定到JavaBean
我尝试在Spring controller中绑定一个对象,以便将其用作Spring将@PathVariable绑定到JavaBean,java,spring-boot,spring-mvc,Java,Spring Boot,Spring Mvc,我尝试在Spring controller中绑定一个对象,以便将其用作@PathVariable。我想这样做,因为我想传递一些@PathVariable。我也尝试过和的解决方案。但两者都不起作用 我已经在我的控制器中创建了类似的东西 @RestController @RequestMapping("/buildings") @RequiredArgsConstructor public class BuildingController { private final BuildingS
@PathVariable
。我想这样做,因为我想传递一些@PathVariable
。我也尝试过和的解决方案。但两者都不起作用
我已经在我的控制器中创建了类似的东西
@RestController
@RequestMapping("/buildings")
@RequiredArgsConstructor
public class BuildingController {
private final BuildingService buildingService;
@GetMapping("/{buildingId}/floors/{floorId}/rooms/{roomId}/sections")
public Flux<SectionDTO> getRoomSections(BuildingRequestBean request) {
return this.buildingService.getRoomSections(request);
}
}
当我选中BuildingRequestBean
时,当我使用getlocalhost:8080/buildings/a/floors/b/rooms/c/sections
调用它时,属性为null。
但是,如果我将其称为@RequestParam
,它将不会为null,类似这样的getlocalhost:8080/buildings/{buildingId}/floors/{floorId}/rooms/{roomId}/sections?buildingId=a&floorId=b&roomId=c
如何修复它,使其行为类似于
@PathVariable
,而不是类似于@RequestParam
?您可以使用@ModelAttribute
试试这个:
@GetMapping("/{buildingId}/floors/{floorId}/rooms/{roomId}/sections")
public Flux<SectionDTO> getRoomSections(@ModelAttribute BuildingRequestBean request) {
return this.buildingService.getRoomSections(request);
}
@GetMapping(“/{buildingId}/floors/{floorId}/rooms/{roomId}/sections”)
公共流量getRoomSections(@ModelAttribute BuildingRequestBean请求){
返回此.buildingService.getRoomSections(请求);
}
必须将路径变量添加到函数参数中
试试这个:
@GetMapping("/{buildingId}/floors/{floorId}/rooms/{roomId}/sections")
public Flux<SectionDTO> getRoomSections(@PathVariable String buildingId,@PathVariable String floorId ,@PathVariable String roomId) {
@GetMapping(“/{buildingId}/floors/{floorId}/rooms/{roomId}/sections”)
public Flux getRoomSections(@PathVariable String buildingId、@PathVariable String floorId、@PathVariable String roomId){
如果@PathVariable
太多,会导致控制器变得混乱。我希望@PathVariable
可以包装在一个对象中。使用json请求{buildingId:x,floorId:y,roomId:z}@getmapping(/FunctionName')公共流量getRoomSections(@RequestBody BuildingRequestBean BuildingRequestBean){您可以这样使用它,而无需将其添加到路径。我尝试添加@modeldattribute
,但是它不起作用。使用spring boot或spring?我使用spring boot 2.2,但它不起作用。如果您调用此urllocalhost:8080/buildings/a/floors/b/rooms/c/sections
,则仍然像@RequestParam
一样操作。映射应该是work、 我在本地测试了我遇到了同样的问题,我使用的是2.3.2.RELEASE。您解决了这个问题吗?没有,我没有找到任何解决方案。可能在当前的spring版本中没有办法。我正在手动绑定变量,然后通过代码调用验证
@GetMapping("/{buildingId}/floors/{floorId}/rooms/{roomId}/sections")
public Flux<SectionDTO> getRoomSections(@PathVariable String buildingId,@PathVariable String floorId ,@PathVariable String roomId) {