Java 返回Spring MVC Post请求的JSON响应
我有下面的控制器方法,它是上传文件到我的服务器。我想返回Plupload状态的JSON。然而,响应似乎是作为分派而不是json@ResponseBy发送回来的。有什么想法吗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 = "
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提供有关注释方法返回类型的信息,这相当于注释方法本身。