SSM注解ResponseBody No converter found for return value of type: class java.util.HashMap

如题,最近在搭建一个SSM+Maven框架,在Controller层加上@ResponseBody注解时,返回的类型转换成JSON对象会出错,前端请求的ajax不能够进入到success下 情况如下:

前端代码(ajax)

$.ajax({
			cache: true,
			type: "POST",
			url:"login",
			data: {
				user_name : $("#user_name").val(),
				user_pwd : CryptoJS.MD5($("#user_pwd").val()).toString(),

			},
			async: false,
			success: function(data){   
				alert(data);
				if(data.success)
				{
					alert(data);
					$("#loginYes").submit();
				}else
				{
					 $.messager.alert('提示',data.msg);
					 $("#passWord").val("") ;
				}
			},
			error : function(r){
				$.messager.alert('提示',"系统忙,请稍后再试!");
			}
		});

后台代码(controller层)

	@ResponseBody
	@RequestMapping("/login")
	public Map login(Model model,HttpServletRequest request,HttpServletResponse response,HttpSession session,User param) {
		Map m = new HashMap();		
		/*String rand = "" + session.getAttribute("rand");*/
		/*if(rand.equals(param.getRand())) {*/
			User user = iUserService.existUser(param);
			boolean exist = user==null ? false : true;
			if(exist) {
				if(user.getRole_id() == null) {
					m.put("success", false);
					m.put("msg", "用户尚未分配权限,请联系系统管理员!");
					return m;
				}else {
					//获取角色信息
					Role role = new Role();
					role.setId(Integer.parseInt(user.getRole_id()));
					role = iRoleService.getOneById(role);
					session.setAttribute("role", role);
					//获取用户权限
					List auths = iUserService.getUserAction(user);
					if(auths.size() == 0) {
						m.put("success", false);
						m.put("msg", "用户尚未分配权限,请联系系统管理员!");
						return m;
					}
					
					session.setAttribute("user", user);
					session.setAttribute("auth", auths);
					
					//获取用户菜单目录
					List menus = iUserService.getUserMenu(user);
					//String menu = createMenuString(menus);
					session.setAttribute("menu", menus);
					
					//重置最后登录时间
					SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
					String now = sdf.format(new Date());
					user.setLast_time(now);
					if(iUserService.modLogin(user)) {
						m.put("success", true);
					}else {
						m.put("success", false);
						m.put("msg", "重置登录时间失败,登录要求被拒绝!");
					}
				}
			}else {
				m.put("success", false);
				m.put("msg", "不存在的用户,或者账号密码不匹配!");
			}
		/*}else {
			m.put("success", false);
			m.put("msg", "验证码输入错误,请重新输入!");
		}*/
		return m;
	}

运行后,ajax可以访问controller方法,但是返回的json数据后,ajax的success接收不到,提示的错误是:  
java.lang.IllegalArgumentException: No converter found for return value of type: class java.util.HashMap

在使用@ResponseBody注解时,controller方法中返回的数据会自动转化为json格式的数据,但是出现如上错误因此可以猜测为,返回值转成json类型数据错误可能是配置错误或json包错误。

解决方法: 由于我的是Maven构建的项目 

在pom.xml中加入


		
		
			com.fasterxml.jackson.core
			jackson-databind
			2.8.8
		
		
		
			com.fasterxml.jackson.core
			jackson-core    
			2.8.8
		
		    
			com.fasterxml.jackson.core    
			jackson-annotations    
			2.8.8
		
		
		
		    net.sf.json-lib
		    json-lib
		    2.4
		    jdk15
		

      然后通过Maven->update project ,重新运行项目就可以了。

ResponseBody注解的作用

1、@responseBody注解的作用是将controller的方法返回的对象通过适当的转换器转换为指定的格式之后,写入到response对象的body区,通常用来返回JSON数据或者是XML数据,需要注意的呢,在使用此注解之后不会再走试图处理器,而是直接将数据写入到输入流中,他的效果等同于通过response对象输出指定格式的数据。

2、@RequestMapping("/login")
  @ResponseBody
  public User login(User user){
    return user;
  }
  User字段:userName pwd
  那么在前台接收到的数据为:'{"userName":"xxx","pwd":"xxx"}'

  效果等同于如下代码:
  @RequestMapping("/login")
  public void login(User user, HttpServletResponse response){
    response.getWriter.write(JSONObject.fromObject(user).toString());
  }

你可能感兴趣的:(json,ajax,javaScript)