2017-08-16 2 views
0

J'ai @Entity appelé Scenario. J'ai un @Repository pour cela et le repos de données de ressort qui génère le contrôleur de MVC pour les opérations de CRUD. Le chemin est /api/scenarios. Travaux.Créer des entités avec un type mime personnalisé en plus du contrôleur de repos de données de ressort

Je veux être en mesure de POST au point d'extrémité /api/scenarios non seulement avec le JSON par défaut, mais aussi avec multipart/form-data donc je peux créer mes Scenario à partir d'un fichier que le téléchargement de l'utilisateur. J'ai essayé de créer la coutume @Controller:

@RestController 
public class ImportController { 

    @ResponseStatus(HttpStatus.CREATED) 
    @RequestMapping(value = "/api/scenarios", method = RequestMethod.POST, consumes = MediaType.MULTIPART_FORM_DATA_VALUE) 
    public ResponseEntity<Void> uploadScenario(@RequestPart(name = "scenario") MultipartFile scenarioFile) { 
     ... 
    } 
} 

Avec cela le téléchargement pour multipart/form-data œuvres, mais je ne peux plus accéder au enpoint avec GET. Je reçois Méthode non autorisée. Comme si mon contrôleur personnalisé masquait celui généré par le repos des données de printemps.

Existe-t-il un moyen d'ajouter un tel POST personnalisé au-dessus du contrôleur existant pour que je puisse créer mes Scenario s avec les types JSON et application/form-data-mime?

Répondre

1

Vous devez spécifier ce contrôleur personnalisé en tant que contrôleur de référentiel que Spring ajoutera vos méthodes personnalisées à ce contrôleur généré.

Veuillez noter que vous n'avez pas besoin d'ajouter un chemin de base API à votre mappage de contrôleur. Ainsi, votre cartographie ici est "/scenarios", pas "/api/scenarios"

@RepositoryRestController 
    @RequestMapping("/scenarios") 
    public class ImportController { 

    @ResponseStatus(HttpStatus.CREATED) 
    @RequestMapping(method = RequestMethod.POST, consumes = MediaType.MULTIPART_FORM_DATA_VALUE) 
    public ResponseEntity<Void> uploadScenario(@RequestPart(name = "scenario") MultipartFile scenarioFile) { 
     ... 
    } 
} 
+0

Eh oui, le '/ scenarios' vs'/api/scenarios' était la partie que j'ai raté. J'ai essayé '@ RepositoryRestController' mais n'ai pas eu de chance en raison d'un mauvais chemin. Remercier! –