2013-06-03 57 views
1

我有下面的控制器方法,它将文件上传到我的服务器。我想返回JSON Plupload的状态。然而,响应似乎是作为一个调度发回,而不是json @ResponseBody。有任何想法吗?为Spring MVC返回JSON响应Post请求

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; 
    } 
} 

抛出以下错误:

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

回答

2

我觉得你的方法应该被@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") 

这是怎么春季检查JSON的转换:注解驱动启用

  • 回归方法与注解@ResponseBody:

    • 杰克逊库在项目类路径
    • MVC的存在

    Spring将自动处理JSON转换。

  • +0

    我编辑你的答案,我使用的最终修复它,因为你的是足够接近,让我在那里的方法。谢谢! – zmanc

    +0

    语法不正确,请不要编辑一个答案,提示文本中所说的语句完全错误(“返回类型应为@ResponseBody”),因为它不再有意义。 –

    +0

    @ThomasW注释用法不能是返回类型。返回类型是'String'。该方法用'@ ResponseBody'注解。 –

    0

    方法必须有一个返回类型的String,它与注解分开(结果将被用作响应体)。

    @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") 
    
    +0

    '@ResponseBody public String uploadItem(..)'相当于'public @ResponseBody String uploadItem(..)'。 Java语法允许两者。 –

    +0

    '@ ResponseBody'是一个注解,而不是一个类型 - 因此不可能是方法的返回类型。由于这个原因,Juned的答案显然是错误的。但是,感谢@SotiriosDelimanolis关于注释方法的返回类型的信息,相当于注释方法本身。 –