2017-09-03 9 views
1

私のアプリには1つのエンティティUserがあります。春データRESTは私に標準エンドポイントを提供します。スタンダードSpringデータREST APIをオーバーライド

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

私は、エンドポイントURL /userを変更しないDELETEエンドポイントのデフォルトの動作をオーバーライドする必要があります。私は私のコントローラに以下を追加した場合:

@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

を、私はこの方法を知っているが、どのようにコントローラでこれを行うには? –

+0

@CatH最初の行を読む... – Cepr0

+0

@CatH更新を参照してください... – Cepr0

関連する問題