Spring Bind @PathVariable для JavaBean - PullRequest
1 голос
/ 06 апреля 2020

Я пытаюсь привязать объект в контроллере Spring, чтобы он мог использоваться как @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.java вот так

@Getter
@Setter
public class BuildingRequestBean {

  private String buildingId;

  private String floorId;

  private String roomId;
}

Когда я проверяю BuildingRequestBean, атрибуты равны нулю, когда я вызываю его с GET localhost:8080/buildings/a/floors/b/rooms/c/sections. Тем не менее, он не будет нулевым, если я назову его @RequestParam, что-то вроде этого GET localhost:8080/buildings/{buildingId}/floors/{floorId}/rooms/{roomId}/sections?buildingId=a&floorId=b&roomId=c

Как это исправить, чтобы он вел себя как @PathVariable, а не как @RequestParam?

Ответы [ 2 ]

0 голосов
/ 06 апреля 2020

PathVariable должен быть добавлен к параметру функции

Попробуйте это:

@GetMapping("/{buildingId}/floors/{floorId}/rooms/{roomId}/sections")
public Flux<SectionDTO> getRoomSections(@PathVariable String buildingId,@PathVariable String floorId ,@PathVariable String roomId) {
0 голосов
/ 06 апреля 2020

U можно получить с помощью @ModelAttribute

Попробуйте с этим:

@GetMapping("/{buildingId}/floors/{floorId}/rooms/{roomId}/sections")
    public Flux<SectionDTO> getRoomSections(@ModelAttribute BuildingRequestBean request) {
        return this.buildingService.getRoomSections(request);
    }
...