我有一个带有
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的上下文中使用它是否可行?
您可以在 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);
}
}