簡體   English   中英

Spring:我可以將我的請求映射抽象到基礎 class 嗎?

[英]Spring: Can I abstract my request mappings away to a base class?

我的 Spring 引導應用程序有一堆 REST controller 類,所有這些類都在各自的模型上執行或多或少相同的標准 CRUD 操作(一個是/user /group ,是等) 將此行為打包到基礎 class 中是有意義的,可能稱為Controller

首先,在 Spring 中是否有像這樣的基礎 class ,我錯過了? 這似乎是很多人需要的方便行為,所以我很驚訝我找不到它。

如果沒有,我需要自己編寫,我的問題是:我該如何處理請求映射注釋,例如@GetMapping@PostMapping 它們的value參數必須是常量,所以我不能只使用超類中的注釋並將每個端點名稱插入其中,如@GetMapping("/" + endpointName + "/{id}") 我是否在沒有注釋的情況下編寫我的請求處理方法,然后在我的 5-6 個子類中的每個子類中包裝和注釋它們,就像這樣?

@RestController
public abstract class Controller<T> {

    public ResponseEntity<T> create(T obj) {
        // Creation behaviour
    }

    // Same for retrieve, update, etc

}

...

public class UserController extends Controller<User> {

    @Override
    @PostMapping("/user")
    public ResponseEntity<User> create(@RequestBody User user) {
        return super.create(user);
    }

    // Repeat for other operations

}

// and repeat for all the other subclasses

似乎有點多余; 如果有更清潔的方法,我會喜歡的。

您可以為您的 CRUD 映射創建通用抽象 controller,例如:

public abstract class AbstractGenericController<E extends yourGenericEntity> {
private static final Logger LOG = LoggerFactory.getLogger(AbstractGenericController.class);
@RequestMapping(value = "/create", method = RequestMethod.POST)
public ResponseEntity<GenericResult<T>> create(@RequestBody String input) {
// your process
}
@RequestMapping(value = "/update", method = RequestMethod.POST)
public ResponseEntity<GenericResult<T>> update(@RequestBody String input) {
// your process
}

然后您的 controller 將擴展抽象 controller。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM