######springmvc中方法返回值为String时@responseBody不能返回json对象。
2017-12-09 20:21
661 查看
==============【应用:这一特性,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对象】
===因为所有浏览器都支持 文本格式。即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
这是我后台代码: 当我前台发送一个channelId=2给后台时,通过断点调试如上图可以知道已经接受到了。 可是前台接受到数据后报错: 上网一查知道这个错误是因为返回的数据不是json的原因造成的。 通过浏览器调试功能查看返回的是:channelId=2如图: 这下问题来了,为什么不是这种形式的数据 channelId:2 呢?@response 它不是会把数据转换成json吗? 如果我把方法的返回值类型改成Map<String,Object>,它能成功转成json数据,可是String为什么不能呢? 哪位大神告诉我原理啊?谢谢。。。 更多0分享到: |
发表于: 2016-01-27 14:20:56 楼主 对我有用[1] 丢个板砖[0] 引用 | 举报 | 管理 回复次数:6 |
u013066244 思念悲伤 | 自己顶一顶,希望大神来回答下, |
回复于: 2016-01-27 14:43:21#1 得分:0 对我有用[1] 丢个板砖[0] 引用 | 举报 | 管理 |
tzdwsy 嗡汤圆 | RequestMappingR中加上produces=“application/json”试试 |
回复于: 2016-01-27 18:19:22 来自移动客户端#2 得分:50 对我有用[1] 丢个板砖[0] 引用 | 举报 | 管理 |
u013066244 思念悲伤 | 自己解决了:针对我上面的例子,解决办法是增加如下代码 Java code ? | ||
回复于: 2016-01-27 19:50:21#3 得分:0 对我有用[1] 丢个板砖[0] 引用 | 举报 | 管理 |
xiaofanku 街头小贩 更多勋章 | 去看看json的格式吧。 |
回复于: 2016-01-27 21:50:04#4 得分:15 对我有用[1] 丢个板砖[0] 引用 | 举报 | 管理 |
u013066244 思念悲伤 | 引用 2 楼 tzdwsy 的回复: RequestMappingR中加上produces=“application/json”试试 这样写只是返回前台后不报错,但是数据格式依然不是json的,它只是在返回的数据上打了个引号;“channelId=2” 真正的解决方法应该是这样的 Java code ? 我之前用了,后台断点调试结果分析 channelId = “channelId=2”.结果被解析成这样。 我前台发送数据的是: JavaScript code ? 但是这样后台得到的数据变成channelId = “channelId=2”。 所以我用手动拼接字符串来发送数据。 当然真正实际应用一般不是用String来接收数据,一般都是pojo类对象来接收!(给自己做总结) |
相关文章推荐
- 解决spring-mvc @responseBody注解返回json 乱码问题
- spring mvc @ResponseBody/@RequestBody 配值action直接把对象输入json格式输入到前端相关配置
- Spring MVC @ResponseBody返回Json
- 解决spring-mvc @responseBody注解返回json 乱码问题
- SpringMVC @ResponseBody 返回json date 转换
- SpringMVC @ResponseBody注解 json转换 返回406
- springmvc @ResponseBody 返回json数据错误
- Spring Mvc @ResponseBody String返回中文字符串乱码
- springmvc @ResponseBody 返回json数据错误
- SpringMVC@ResponseBody返回JSON乱码
- Spring Mvc @ResponseBody String返回中文字符串乱码
- springmvc @ResponseBody 返回json数据错误
- Spring Mvc @ResponseBody返回json乱码
- spring mvc @responsebody返回json数据 ie浏览器弹出下载页面 解决方案
- 配置SpringMVC返回JSON遇到的坑/SpringMVC @ResponseBody 415错误处理
- SpringMVC @ResponseBody 返回json date 转换
- 解决spring-mvc @responseBody注解返回json 乱码问题
- 解决spring-mvc @responseBody注解返回json 乱码问题
- 解决spring-mvc @responseBody注解返回json 乱码问题
- Spring MVC+hibernate 使用@ResponseBody返回json报500 (Internal Server Error)