繁体   English   中英

覆盖标准的Spring Data REST API

[英]Override standart Spring Data REST API

我的应用中有一个实体User Spring Data REST为我提供了标准端点:

`GET`    /user
`GET`    /user/<id>
`POST`   /user
`PUT`    /user
`PATCH`  /user
`DELETE` /user/<id>

我需要覆盖DELETE端点的默认行为,而不是更改端点url /user 如果我向控制器添加以下内容:

@Controller
@RequestMapping("/user")
public class User {

    @DeleteMapping("/{id}")
    @CrossOrigin
    public ResponseEntity<?> delete(@PathVariable("id") final String id) {
        userService.delete(id); // in service I remove user with other 
        return ResponseEntity.ok().build();
    }

    // other custom endpoints

}

我发现其他标准REST端点不起作用 - 我总是收到405错误。 所以,我的问题是 - 如何自定义此端点而不影响其他端点? (我知道如何在@RepositoryEventHandler执行此操作 - 但在我的情况下我应该避免这种情况)

你读过这个: 覆盖Spring Data REST响应处理程序吗?

@RepositoryRestController
@RequestMapping("/users") // or 'user'? - check this...
public class UserController {

    @Autoware 
    private UserRepo userRepo;

    @Transactional 
    @DeleteMapping("/{id}") 
    public ResponseEntity<?> delete(@PathVariable("id") String id) { // or Long id?..

        // custom logic

        return ResponseEntity.noContent().build();
    }
}

但是,如果要添加额外的业务逻辑来删除进程,您甚至不需要实现自定义控制器,您可以使用自定义事件处理程序

@Component
@RepositoryEventHandler(User.class) 
public class UserEventHandler {

  @Autoware 
  private UserRepo userRepo;

  @BeforeDeleteEvent
  public void beforeDelete(User u) {
    //...
    if (/* smth. wrong */) throw new MyException(...);
  }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM