Java 返回Spring MVC Post请求的JSON响应

Java 返回Spring MVC Post请求的JSON响应,java,http,spring-mvc,java-7,plupload,Java,Http,Spring Mvc,Java 7,Plupload,我有下面的控制器方法,它是上传文件到我的服务器。我想返回Plupload状态的JSON。然而,响应似乎是作为分派而不是json@ResponseBy发送回来的。有什么想法吗 private static final String RESP_SUCCESS = "{\"jsonrpc\" : \"2.0\", \"result\" : \"success\", \"id\" : \"id\"}"; private static final String RESP_ERROR = "

我有下面的控制器方法,它是上传文件到我的服务器。我想返回Plupload状态的JSON。然而,响应似乎是作为分派而不是json@ResponseBy发送回来的。有什么想法吗

    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'

我认为你的方法应该用@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转换的方式:

  • Jackson库存在于项目类路径中
  • 已启用mvc:注释驱动
  • 用@ResponseBody注释的返回方法

Spring将自动处理JSON转换。

方法必须有一个字符串返回类型,该类型与注释(结果将用作响应体)分开

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

我编辑了你对我使用的方法的回答,最终解决了这个问题,因为你的答案离我很近。非常感谢。语法不正确,请不要编辑提示与文本所述语法完全错误的答案(“返回类型应为@ResponseBody”),因为它不再有意义。@ThomasW注释用法不能是返回类型。返回类型为
String
。这个方法是用
@ResponseBody
@ThomasW注释的,还是你只是说他们的措辞是错误的?@SotiriosDelimanolis——读一下朱纳德回答的措辞(这与那些乐于助人的人“修正”代码的措辞明显不同)。“我认为您的方法返回类型应该是
@ResponseBody
,而不是String。”他最初的回答包含了不正确的代码。Juned错误地认为
@ResponseBody
是有效的返回类型,而事实并非如此。
@ResponseBody public String uploadItem(..)
相当于
public@ResponseBody String uploadItem(..)
。Java语法允许这两者。
@ResponseBody
是注释,而不是类型——因此不可能是方法的返回类型。因此,朱纳德的回答显然是错误的。但是感谢@SotiriosDelimanolis提供有关注释方法返回类型的信息,这相当于注释方法本身。