SpringMVC 报错The server refused this request because the request entity is in a format n...的解决办法

  最近开了个SSM的项目,在用JQuery通过ajax传json格式的数据给springMVC的接口时,一直报错415:The server refused this request because the request entity is in a format not supported by the requested resource for the requested method.

1、后台代码:

@RequestMapping(value="/getCustOrder",method = RequestMethod.POST,produces="text/html;charset=UTF-8")
	public @ResponseBody String getJhtCustOrderById( @RequestBody JhtInfoVO jhtInfoVO){
		 

		List list=null;
		try {
			list =         baseSearchJhtErrorDataServiceIml.getJhtCustOrderData(jhtInfoVO.getAgencyInfoId(), jhtInfoVO.getStartDate());		
			
		} catch (Exception e) {
			
			e.printStackTrace();
		}
		
		if (list!=null) {
			 
			 
			return new JSONArray(list).toString();
		}else{
			
			return "1";
		}
		
		
		
	}

2、前台代码

	$.ajax({			
	        url: "getCustOrder.action",
	        type: "POST",
	        data: JSON.stringify(senddata), 
	        timeout:20000,
	        datatype:"json",
	        contentType:"application/json",
			success:function(data){

				var redata=	JSON.parse(data);
			
			
			},
			error:function(XMLHttpRequest,textStatus,errorThrown){
				
				alert("错误,服务器异常,请稍后重试!");
			}
			
		});

 

上网搜了下类似问题大佬们的解决办法,把所有可能都试了个遍,结果还是.......依旧报错到怀疑人生。最后把spring的流程整个梳理了一遍,终于找到了问题发生的原因。这里总结下该报错发生的原因:

(1)ajax的请求头 contentType参数一定要是:"application/json",否则有可能会报该错误;

(2)项目路径要有Jackson的相关类包:jackson-databind-2.7.5.jar、jackson-annotations-2.7.0.jar及jackson-core-2.7.5.jar,有一点要注意的是如果spring版本不高,这几个包不要用2.7及以上的版本,不然会报错:java.lang.NoSuchMethodError: com.fasterxml.jackson.databind.type.如果见到这种报错,建议jackson类包换成2.7以下的版本;

(3)spring的配置里面要有,即启用了注解识别;

(4)这一点也是我的报错的原因,spring的配置里面一定要加上Json转换器:

    
	        
	      
	     
	           
	       
	        
  

不过这种配置方式其实有点过时了,相关内容可以参考:https://blog.csdn.net/yfisaboy/article/details/31755631。

你可能感兴趣的:(jackson,@RequestBody,SpringMVC,Json)