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

山鬼谣me 2016-01-27 02:20:56
这是我后台代码:


当我前台发送一个channelId=2给后台时,通过断点调试如上图可以知道已经接受到了。

可是前台接受到数据后报错:


上网一查知道这个错误是因为返回的数据不是json的原因造成的。

通过浏览器调试功能查看返回的是:channelId=2如图:


这下问题来了,为什么不是这种形式的数据 channelId:2 呢?@response 它不是会把数据转换成json吗?
如果我把方法的返回值类型改成Map<String,Object>,它能成功转成json数据,可是String为什么不能呢?
哪位大神告诉我原理啊?谢谢。。。
...全文
6277 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
山鬼谣me 2016-01-28
  • 打赏
  • 举报
回复
引错楼层了,我上面是要引用我自己的楼层!
山鬼谣me 2016-01-28
  • 打赏
  • 举报
回复
引用 2 楼 tzdwsy 的回复:
RequestMappingR中加上produces=“application/json”试试
这样写只是返回前台后不报错,但是数据格式依然不是json的,它只是在返回的数据上打了个引号;“channelId=2” 真正的解决方法应该是这样的

	@RequestMapping(value="/ceshijson",produces="application/json;charset=UTF-8")
	@ResponseBody
	public String ceshijson(String channelId) throws IOException{
		Map<String,Object> map = new HashMap<String,Object>();
		 map.put("channelId", channelId);
		 ObjectMapper mapper = new ObjectMapper();
		 channelId = mapper.writeValueAsString(map);
		 
		return channelId;
	}
这里需要注意是,当使用简单类型即:String这样的类型来接收数据时,不需要使用@RequestBody这个注解。 我之前用了,后台断点调试结果分析 channelId = “channelId=2”.结果被解析成这样。 我前台发送数据的是:
$.ajax({
		          url:"ceshijson",
		          type:"post",
		          dataType:'json',
		          //contentType:'application/json;charset=utf-8',
		          data:"channelId="+channelId,
		          success:function(data){
		          		alert(data);
		          },
		          error:function(XMLHttpRequest, textStatus, errorThrown){  
               		alert("Error")  
               		alert(XMLHttpRequest.status);  
                    alert(XMLHttpRequest.readyState);  
                    alert(textStatus);  
                   }
        	});
原本我发送数据格式是data:{"channelId":channelId},并且使用@RequestBody, 但是这样后台得到的数据变成channelId = “channelId=2”。 所以我用手动拼接字符串来发送数据。 当然真正实际应用一般不是用String来接收数据,一般都是pojo类对象来接收!(给自己做总结)
街头小贩 2016-01-27
  • 打赏
  • 举报
回复
去看看json的格式吧。
山鬼谣me 2016-01-27
  • 打赏
  • 举报
回复
自己解决了:针对我上面的例子,解决办法是增加如下代码
ObjectMapper mapper = new ObjectMapper();
channelId = mapper.writeValueAsString(channelId);


如图:
嗡汤圆 2016-01-27
  • 打赏
  • 举报
回复
RequestMappingR中加上produces=“application/json”试试
山鬼谣me 2016-01-27
  • 打赏
  • 举报
回复
自己顶一顶,希望大神来回答下,
内容概要:本文详细阐述了现代汽车电子电气架构(EE架构)的整车拓扑与域划分设计规范,重点介绍央计算单元(CCU)、区域控制器(Zone)及五大核心域(智驾域、座舱域、车身域、动力域、底盘域)的架构定义、功能职责、关键技术要求与演进趋势。文章强调“逻辑归域、物理归Zone”的分层设计理念,解析了各域在不同架构形态下的协同机制与接口关系,涵盖算力配置、功能安全(ASIL等级)、信息安全、电源管理、通信架构等关键要素,并展望舱驾融合、线控化、800V高压平台、端到端智驾等未来发展方向。; 适合人群:具备汽车电子、车辆工程或相关专业背景,从事EE架构、域控制器开发、整车系统设计等工作1-5年的工程师和技术管理人员。; 使用场景及目标:①指导整车EE架构的设计与优化,明确域与Zone的职责边界;②支持域控制器选型、算力规划与安全等级定义;③推动平台化、标准化架构落地,提升系统集成度与可扩展性;④把握智能化、电动化趋势下的技术演进方向。; 阅读建议:此资源技术深度较高,建议结合实际项目背景阅读,重点关注各域的接口定义、安全要求与架构演变路径,宜配合系统架构图、信号流图等工具辅助理解,并在团队内开展专题研讨以促进共识形成。

81,110

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧