Spring-MVC + Json遇到的无法返回前端的坑

          由于做项目使用Spring-MVC架构,而Json格式的数据又是返回前端时经常用到的,越是常见的东西往往莫名其妙的出错,后端是这样写的:

@RequestMapping(value ="/application/applicationPublish", method = RequestMethod.POST, produces = "text/html;charset=utf-8")
	@ResponseBody
	public Json applicationPublish(@RequestParam("AppImg") MultipartFile AppImg,@RequestParam("AppDoc") MultipartFile AppDoc, DeveloperApplication developerApplication,HttpServletRequest request, HttpServletResponse response) {
		SessionInfo sessionInfo = (SessionInfo) Webutil.getSessionInfoAttribute(request);
		//应用发布之前重设协议名称
		developPackageService.saveNewProtocolName(sessionInfo, developerApplication.getId());
		Json json = applicationService.savePublishApplication(sessionInfo, AppImg, AppDoc, developerApplication.getId(), developerApplication);
		return Json;
	}

             没想到报错了,先是后台报Could not find acceptable representation,把produses去掉以后,前台又报Unexpected token < in JSON at position 0,最后查看http协议头终于解决问题:

普通的form提交后,请求头是这样的:

Accept:
application/json, text/javascript, */*; q=0.01

Content-Type:
application/x-www-form-urlencoded; charset=UTF-8

但是带文件上传的form中,请求头是这样的:

Accept:
text/html,application/xhtml+xml,application/xml;q=0.9,i

Content-Type:
multipart/form-data; boundary=----WebKitFormBounda

其中,Accept代表发送端(客户端)希望接受的数据类型。 Content-Type代表客户端希望接受的数据类型是xml类型。这说明,文件上传的form,客户端希望接收的是text/html类型,而不是Json对象,所以直接返回是有问题的。

  解决上述问题:

@RequestMapping(value ="/application/applicationPublish", method = RequestMethod.POST, produces = "text/html;charset=utf-8")
	@ResponseBody
	public void applicationPublish(@RequestParam("AppImg") MultipartFile AppImg,@RequestParam("AppDoc") MultipartFile AppDoc, DeveloperApplication developerApplication,HttpServletRequest request, HttpServletResponse response) {
		SessionInfo sessionInfo = (SessionInfo) Webutil.getSessionInfoAttribute(request);
		//应用发布之前重设协议名称
		developPackageService.saveNewProtocolName(sessionInfo, developerApplication.getId());
		Json json = applicationService.savePublishApplication(sessionInfo, AppImg, AppDoc, developerApplication.getId(), developerApplication);
		BaseResult.writeJson(request, response, json);
	}
其实就是把Json对象转化成Json字符串再传到前端即可解决。


你可能感兴趣的:(Spring-MVC)