2017-09-03 59 views
1

我在我的應用程序中有一個實體User。春季數據REST爲我提供了標準的端點:忽略標準彈簧數據REST API

`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中做到這一點 - 但我應該避免這種情況)

回答

3

你看過這個:Overriding Spring Data REST Response Handlers

@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(); 
    } 
} 

但是,如果你想添加額外的業務邏輯刪除過程中,你甚至都不需要實現定製的控制器,可以使用自定義event handler

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

    @Autoware 
    private UserRepo userRepo; 

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

我知道這種方式,但如何在Controller中做到這一點? –

+0

@CatH閱讀第一行... – Cepr0

+0

@CatH查看更新... – Cepr0