Spring将@PathVariable绑定到JavaBean

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

我尝试在Spring controller中绑定一个对象,以便将其用作
@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,但它不起作用。如果您调用此url
localhost: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) {