类似方法的Spring静止控制器的推广

q8l4jmvw  于 2021-07-13  发布在  Java
关注(0)|答案(1)|浏览(243)

在spring引导应用程序中,有两个rest端点用于不同的资源,但它们的实现几乎相同。请看下面的例子。
资源1:

@GetMapping(path = "/resource-1/{name}", produces = APPLICATION_JSON_VALUE)
public ResponseEntity<CustomResponse> getResource1(@PathVariable("name") String name) {
    try {
        return ResponseEntity.ok(myService.getResource1(name));
    } catch (EntityNotFoundException e) {
        return status(NOT_FOUND).build();
    } catch (Exception e) {
        return status(INTERNAL_SERVER_ERROR).build();
    }
}

资源2:

@GetMapping(path = "/resource-2/{name}", produces = APPLICATION_JSON_VALUE)
public ResponseEntity<CustomResponse> getResource2(@PathVariable("name") String name) {
    try {
        return ResponseEntity.ok(myService.getResource2(name));
    } catch (EntityNotFoundException e) {
        return status(NOT_FOUND).build();
    } catch (Exception e) {
        return status(INTERNAL_SERVER_ERROR).build();
    }
}

如您所见,这些方法仅在所调用的服务方法中有所不同,具体取决于资源路径 resource-1 或者 resource-2 .
有没有什么“springboot”式的方法来减少重复的代码,并将其放在一个更通用的方法中?

rwqw0loc

rwqw0loc1#

这对我有用

@GetMapping(path = "/resource-{var}/{name}", produces = APPLICATION_JSON_VALUE)
public ResponseEntity<CustomResponse> getResource(@PathVariable ("var") int var, @PathVariable("name") String name) {
    // do according to the var value
}

相关问题