码迷,mamicode.com
首页 > 编程语言 > 详细

Mybatis懒加载时,springMVC返回JSON异常 Could not write JSON: No serializer found for class org.apache.ibatis.executor.loader.javassist.JavassistProxyFactory$EnhancedResultObjectProxyImpl

时间:2018-12-31 23:09:01      阅读:917      评论:0      收藏:0      [点我收藏+]

标签:代理   nbsp   could   factory   mvc   ack   request   except   exception   

在mybatis集成springmvc时,假如mybatis采用了懒加载,而springmvc中利用@ResponseBody注解返回实体类的JSON时会抛异常:

Could not write JSON: No serializer found for class org.apache.ibatis.executor.loader.javassist.JavassistProxyFactory$EnhancedResultObjectProxyImpl and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS);
先看出现问题的代码:

首先是controller中返回的是responsebody:

    /**
     * 根据订单ID查询订单
     * @param orderId
     * @return
     */
    @ResponseBody
    @RequestMapping(value = "/query/{orderId}" ,method = RequestMethod.GET)
    public Order queryOrderById(@PathVariable("orderId") String orderId) {
        return orderService.queryOrderById(orderId);
    }

 

service中的代码:

    public Order queryOrderById(String orderId) {
        Order order = orderDao.queryOrderById(orderId);
        return order;
    }
    public Order queryOrderById(String orderId) {
        return this.orderMapper.queryByID(orderId);
    }

调用的mapper.xml中使用了懒加载:

    <resultMap type="Order" id="pojoResultMap" autoMapping="true">
        <id column="order_id" property="orderId"/>
        <association property="orderShipping" javaType="OrderShipping" column="order_id" select="queryOrderShippingByOrderId" autoMapping="true" fetchType="lazy"></association>
        <collection property="orderItems" javaType="Arraylist" ofType="OrderItem" autoMapping="true" select="queryOrderItemByOrderId" column="order_id" fetchType="lazy">
        </collection>
    </resultMap>

这个时候测试就会上面的异常.

经过调试后发现,原来service中执行过queryByID的方法后,返回的实体类Order被做了代理,如下:

技术分享图片

可以看到,被代理后的Order类多了一个handler的属性,之后Jackson在对该代理类做序列化时,由于找不到对应的getter,异常就抛出来辣!

解决方法:

在被代理的Order类上加上 @JsonIgnoreProperties(value = "handler") 注解,让Jackson序列化时忽略handler属性:

 

技术分享图片

 

 问题解决!

 

Mybatis懒加载时,springMVC返回JSON异常 Could not write JSON: No serializer found for class org.apache.ibatis.executor.loader.javassist.JavassistProxyFactory$EnhancedResultObjectProxyImpl

标签:代理   nbsp   could   factory   mvc   ack   request   except   exception   

原文地址:https://www.cnblogs.com/orangeCitrus/p/10203554.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!