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字符串再传到前端即可解决。


  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值