记录错误Can not deserialize instance of java.lang.String out of START_ARRAY token

记录一下遇到的错误。

2018-12-12 12:40:23.158  WARN 3128 --- [nio-8090-exec-5] .w.s.m.s.DefaultHandlerExceptionResolver : Failed to read HTTP message: org.springframework.http.converter.HttpMessageNotReadableException: Could not read document: Can not deserialize instance of java.lang.String out of START_ARRAY token
 at [Source: java.io.PushbackInputStream@7eac1ba3; line: 1, column: 61] (through reference chain: java.util.LinkedHashMap["userids"]); nested exception is com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of java.lang.String out of START_ARRAY token
 at [Source: java.io.PushbackInputStream@7eac1ba3; line: 1, column: 61] (through reference chain: java.util.LinkedHashMap["userids"])

后端代码:

@RequestMapping(value="/assignexperts",method=RequestMethod.POST)
	public Map<String,Object> assignexperts(@RequestBody Map<String,String> map){
		/*String result= userService.queryprojlist(map);
		 Map<String,String> resultmap = new HashMap<String,String>();
		 resultmap.put("result", result);
		String  param= JSON.toJSONString(resultmap);
		return param;*/
		return userService.assignexperts(map);
	}

前端代码:

function assign(){
	  var webRootPath = '<%=request.getContextPath()%>';	
	  var ruleIds=new Array();
	 // var ruleIds = {};
	var i=0;
	  var proj_id=$("#input").val();
		$("#expertShowTable .js-ck input[name='messagePush']:checked").each(function(){
			/*ruleIds[i] = {};
			ruleIds[i]['userid'] =$(this).val();
			i++;*/
			ruleIds.push($(this).val());
		});
		console.log(ruleIds);
		var qaram = {
				"proj_id" : proj_id,
			"userids": ruleIds
			
			};
		console.log( JSON.stringify(qaram));
		
		$.postJSON(webRootPath + "/assignexperts", qaram, function(data) {
              if (data) {
				
				alert(data.result);
				
				
			}else{
				alert("操作失败!");
			}
		});
  }

这里的操作的选择多行数据进行操作,
在这里插入图片描述
提交的时候$.postJSON()方法会把前端传入的var qaram = {
“proj_id” : proj_id,
“userids”: ruleIds

		};

转化成JSON格式到后端,这里前端传入的值是

在这里插入图片描述
由于 var ruleIds=new Array();,这里的userids的值是个数组,所以
这样的形式其实是Map<String,Object>,而在后端的接口中写的是
public Map<String,Object> assignexperts(@RequestBody Map<String,String> map)
所以会报错说什么String Array 不能序列化成map,要注意前后端参数的类型一定要一致,之前没有意识到这种写法的类型其实是Map<String,Object>,一直用的 Map<String,String>,导致很久没有找到错误原因

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值