@responseBody注解—简单的诠释

 @responseBody注解的作用是将controller的方法返回的对象通过适当的转换器转换为指定的格式之后,写入到response对象的body区,通常用来返回JSON数据或者是XML

  数据,需要注意的呢,在使用此注解之后不会再走试图处理器,而是直接将数据写入到输入流中,他的效果等同于通过response对象输出指定格式的数据。

@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());
  }

SSM出错MyBatis出错Result Maps collection does not contain value for java.lang.Integer

Result Maps collection does not contain value for java.lang.Integer

Mapper文件中写了一个计算的count的 ,我写的返回值是resultMap 正确写法应该是resultType
也就是要检查你写的Mapper文件是不是全部返回值错误,每一个都要检查

Expected one result (or null) to be returned by selectOne(), but found: 4

异常处理–tooManyResultsException

Expected one result (or null) to be returned by selectOne(), but found: 4
异常:TooManyResultsException: Expected one result to be returned by selectOne()
被这个问题困扰了一下午

由错误提示可知,查询的结果是期望一条记录或者为空,但是返回的记过有4条。

那我们来分析一下造成这种问题是什么原因导致的呢?

比如:

你调用的是selectOne方法,但是实际数据库根据条件查询到的有多条数据,那么这时候,你得考虑将selectOne方法换掉
或者因为过滤条件不够精确导致查询数据变多,适当增加过滤条件增加唯一性。
还有就是你确定根据这个条件只能查到一条数据,那么极有可能就是数据库数据问题,找出数据出错的原因,保证唯一性。

检查后发现mapper文件忘记写where 无法保证数据的唯一性,导致出现这个问题
增加where一会,问题解决,mapper不会直接提示,需要你理清楚思路
还有就是修改之后要把项目从tomcat中清除,clean一下重新加载之后才会正确运行