2013-06-03 7 views
1

J'ai la méthode de contrôleur ci-dessous qui télécharge des fichiers sur mon serveur. Je voudrais retourner JSON pour le statut de Plupload. Cependant, la réponse semble renvoyée sous la forme d'un envoi plutôt que d'un @ResponseBody json. Des idées?Retour de la réponse JSON pour Spring MVC Post request

private static final String RESP_SUCCESS = "{\"jsonrpc\" : \"2.0\", \"result\" : \"success\", \"id\" : \"id\"}"; 
    private static final String RESP_ERROR = "{\"jsonrpc\" : \"2.0\", \"error\" : {\"code\": 101, \"message\": \"Failed to upload file.\"}, \"id\" : \"id\"}"; 

    @RequestMapping(method = RequestMethod.POST) 
    public String uploadItem(@RequestBody MultipartFile file, 
          @RequestParam String name, 
          @RequestParam(required = false, defaultValue = "-1") int chunks, 
          @RequestParam(required = false, defaultValue = "-1") int chunk) { 
     Media media = new Media(); 
     try { 
      Path path = Paths.get("/Users/username/Desktop/Test", file.getOriginalFilename()); 
      media.setContentType(file.getContentType()); 
      media.setFileName(file.getOriginalFilename()); 
      media.setFileSize(file.getSize()); 
      media.setFilePath(path.toString()); 
      if (media.getContentType().contains("image")) { 
       Image image = new Image(); 
       image.setImagePath(path.toString()); 
       imageDao.save(image); 
      } 
      byte[] bytes = file.getBytes(); 
      Files.write(path, bytes, StandardOpenOption.CREATE); 
      mediaDao.save(media); 
      return RESP_SUCCESS; 
     } catch (IOException e) { 
      e.printStackTrace(); 

     } 
     return RESP_ERROR; 
    } 
} 

Lancers l'erreur suivante:

WARN - No mapping found for HTTP request with URI [/{"jsonrpc" : "2.0", "result" : "success", "id" : "id"}] in DispatcherServlet with name 'cr' 

Répondre

2

Je pense que votre méthode doit être annotées avec @ResponseBody.

@RequestMapping(method = RequestMethod.POST) 
@ResponseBody 
public String uploadItem(@RequestBody MultipartFile file, 
          @RequestParam String name, 
          @RequestParam(required = false, defaultValue = "-1") int chunks, 
          @RequestParam(required = false, defaultValue = "-1") 

Voici comment les chèques de printemps pour la conversion Json:

  • bibliothèque Jackson existait dans le projet classpath
  • Le mvc: conduit annotation est activée
  • méthode Retour annotées avec @ResponseBody

Spring traitera automatiquement la conversion JSON.

+0

Je modifié votre réponse à la méthode je qui a fini par fixer depuis votre WAS assez proche de moi arriver. Je vous remercie! – zmanc

+0

La syntaxe n'est pas correcte, veuillez ne pas éditer une réponse suggérant une syntaxe complètement fausse de ce que dit le texte ("le type de retour devrait être @ResponseBody") car il n'a plus de sens. –

+0

@ThomasW Une utilisation d'annotation ne peut pas être un type de retour. Le type de retour est 'String'. La méthode est annotée avec '@ ResponseBody'. –

0

La méthode doit avoir un type de retour String, distinct de l'annotation (le résultat doit être utilisé comme corps de réponse). @ResponseBody n'est pas un type de retour, ou un type du tout! C'est une annotation.

Contenu textuel & la syntaxe proposée dans la réponse précédente est grossièrement fausse, bien que je lui donne crédit à d'autres égards.

Ma suggestion:

@RequestMapping(method = RequestMethod.POST) 
@ResponseBody 
public String uploadItem(@RequestBody MultipartFile file, 
         @RequestParam String name, 
         @RequestParam(required = false, defaultValue = "-1") int chunks, 
         @RequestParam(required = false, defaultValue = "-1") 
+0

'@ResponseBody public String uploadItem (..)' est équivalent à 'public @ResponseBody String uploadItem (..)'. La syntaxe Java permet les deux. –

+0

'@ ResponseBody' est une annotation, pas un type - donc ne peut pas être le type de retour d'une méthode. Pour cette raison, la réponse de Juned est sans ambiguïté. Mais merci @SotiriosDelimanolis pour info sur l'annotation du type de retour d'une méthode, étant équivalent à l'annotation de la méthode elle-même. –