如何在 Spring Boot RestController 中预加载公共资源?

问题描述 投票:0回答:1

我有一个带有

RequestMapping(foo/{fooId}/bar/})
的控制器,
FooEntity
用于所有方法,我如何为
FooEntity
的所有方法预加载
FooController

@RestController
@RequestMapping("foo/{fooId}/bar")
public class FooController {

  public void prefetchFoo(@PathVariable Long fooId) {
   ...
  }
  
  @PostMapping("/")
  public ResponseEntity<void> createFooBar(FooEntity prefetchedFoo) {
   ...
  }

 
  @GetMapping("/{barId}")
  public ResponseEntity<void> getFooBar(FooEntity prefetchedFoo) {
   ...
  }

}

我在研究中发现了

@ModelAttribute
,但我只在Web视图的上下文中看到它,在JSON API的上下文中使用它是否可行?

java spring-boot spring-mvc
1个回答
0
投票

您可以在 JSON API 上下文中使用

@ModelAttribute
@ModelAttribute
方法将在每个请求处理程序方法之前调用,并且可以使用必要的数据填充模型属性。无论您的 API 生成视图还是 JSON 响应,这都适用。

@RestController
@RequestMapping("foo/{fooId}/bar")
public class FooController {
@Autowired
private FooService fooService;

@ModelAttribute
public FooEntity prefetchFoo(@PathVariable Long fooId) {
    // Logic to fetch FooEntity based on fooId
    return fooService.findFooById(fooId);
}

@PostMapping("/")
public ResponseEntity<Void> createFooBar(@ModelAttribute FooEntity prefetchedFoo) {
    ...
    return ResponseEntity.ok().build();
}

@GetMapping("/{barId}")
public ResponseEntity<FooEntity> getFooBar(@PathVariable Long barId, @ModelAttribute FooEntity prefetchedFoo) {
   ...
    return ResponseEntity.ok(prefetchedFoo);
}
}
© www.soinside.com 2019 - 2024. All rights reserved.