返回Spring MVC Post请求的JSON响应

时间:2013-06-03 00:31:15

标签: java http spring-mvc java-7 plupload

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

    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 个答案:

答案 0 :(得分:3)

我认为你的方法应该用@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")

这是Spring检查Json转换的方式:

  • 杰克逊图书馆已存在于项目类路径
  • 启用了mvc:annotation-driven
  • 使用@ResponseBody注释的返回方法

Spring将自动处理JSON转换。

答案 1 :(得分: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")