######springmvc中方法返回值为String时@responseBody不能返回json对象。

==============【应用:这一特性,springmvc文件上传时,富文本 kindEditor插件,页面返回 改为 String,解决了《文件上传浏览器兼容性问题》】

===因为所有浏览器都支持 文本格式。即String类型。

===方法返回值类型是对象,注解会转换为json对象返回浏览器,而有的浏览器不支持 json数据。===例如360.

导致文件上传失败。

代码:

@Controller
public class UploadController {
	
	//注入图片服务器地址 ====常量放到 配置文件。====否则修改需要  停止服务器,重新编译
	@Value("${IMAGE_URL}")
	private String IMAGE_URL;
	
	/**
	 * 需求:使用fastDFs分布式文件系统上传图片
	 * 请求:/pic/upload
	 * 参数:uploadFile
	 * 返回值:
	 * 成功时:
	 * {
        "error" : 0,
        "url" : "http://www.example.com/path/to/a.jpg",
        "message":null
		}
	 * 失败时:
	 * {
        "error" : 1,
        "url" : null,
        "message":"上传失败"
		}
	 * 
	 */
	@RequestMapping("/pic/upload")//===请求
	@ResponseBody
//	public KindEditorModel uploadPic(MultipartFile uploadFile){//===参数 名
	public String uploadPic(MultipartFile uploadFile){
		//==######=返回String(所有浏览器都支持 文本格式,有的不支持json),解决浏览器兼容性
		//===返回 String类型json字符串,===不是json对象
		
		try {
			
			//获取上传===文件名称
			String originalFilename = uploadFile.getOriginalFilename();
			//获取===文件扩展名 
			String extName = originalFilename.substring(originalFilename.lastIndexOf(".")+1);
			
			//===创建fastDFS工具类对象,===实现文件上传
			FastDFSClient fClient = new FastDFSClient("classpath:conf/client.conf");
			
			//上传
			//返回图片虚拟地址:group1/M00/00/00/wKhCQ1opB9uAb0VHAA1rIuRd3Es992.jpg
			String url = fClient.uploadFile(uploadFile.getBytes(), extName);
			
			//组合====图片服务器绝对地址
			url = IMAGE_URL+url;
			
			//上传图片成功
			//创建KindEditorModel对象,======封装图片上传信息
			KindEditorModel model = new KindEditorModel();
			model.setError(0);
			model.setUrl(url);
			
			//转换json字符串
			String picJson = JsonUtils.objectToJson(model);

			return picJson;
			
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			//上传图片失败
			//创建KindEditorModel对象,封装图片上传信息
			KindEditorModel model = new KindEditorModel();
			//
			model.setError(1);
			model.setMesssage("上传失败");
			//转换json字符串
			String picJson = JsonUtils.objectToJson(model);

			return picJson;
		}
		
		
		
	}

}

===案例:



==================参考博客:失败案例2:【springmvc String类型返回值, @responseBody不能返回json对象】

springmvc中方法返回值为String时@response不能返回json数据

springmvc中方法返回值为String时@response不能返回jso

发表于: 2016-01-27 14:20:56  楼主 回复次数:6

回复于: 2016-01-27 14:43:21 #1 得分:0
回复于: 2016-01-27 18:19:22   来自移动客户端 #2 得分:50
回复于: 2016-01-27 19:50:21 #3 得分:0
回复于: 2016-01-27 21:50:04 #4 得分:15


  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SpringMVC ,可以使用拦截器(Interceptor)来对请求进行拦截和处理。拦截器可以在请求被处理前或处理后对其进行拦截,并进行一些处理。 如果需要在拦截器获取 Controller 返回的响应结果,可以使用 Spring 提供的 postHandle 方法。该方法会在 Controller 方法执行完成后被调用,可以获取到 Controller 方法返回的 ModelAndView 对象。 在 postHandle 方法,可以通过将 ModelAndView 对象转换为 HttpServletResponse 对象,从而获取到返回给客户端的响应内容。示例代码如下: ``` @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { // 判断是否有返回结果 if(modelAndView != null) { // 获取返回的视图名称 String viewName = modelAndView.getViewName(); // 获取返回的模型数据 Map<String, Object> model = modelAndView.getModel(); // 将 ModelAndView 转换为 HttpServletResponse 对象 ServletOutputStream outputStream = response.getOutputStream(); // 获取响应内容 String content = outputStream.toString(); // 进行处理 } } ``` 需要注意的是,拦截器只能获取到 Controller 返回的 ModelAndView 对象,而无法获取到 Controller 方法直接返回的结果。如果需要获取直接返回的结果,可以在 Controller 方法使用 @ResponseBody 注解返回值转换为 JSON 格式,然后在拦截器进行解析。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值