2017-09-03 3 views
1

J'ai une entité User dans mon application. Spring Les données REST me donne paramètres standards:Remplacer standart Spring Data API REST

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

J'ai besoin de remplacer le comportement par défaut de point final DELETE ne change pas de point final url /user. Si j'ajoutez ce qui suit à mon contrôleur:

@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 

} 

Je trouve que les autres critères d'évaluation standard REST ne fonctionnent pas - Je reçois toujours erreur 405. Donc, ma question est - comment personnaliser ce point de terminaison et ne pas affecter d'autres points de terminaison? (Je sais comment le faire en @RepositoryEventHandler - mais je devrais éviter cela dans mon cas)

Répondre

3

Avez-vous lu ceci: 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(); 
    } 
} 

Mais si vous voulez ajouter une logique d'affaires supplémentaire pour processus de suppression vous même ne pas besoin de mettre en œuvre un contrôleur personnalisé, vous pouvez utiliser une coutume 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

Je sais que cette façon, mais comment faire cela dans le contrôleur? –

+0

@CatH Lire la première ligne ... – Cepr0

+0

@CatH voir la mise à jour ... – Cepr0