标签:代理 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属性:
问题解决!
标签:代理 nbsp could factory mvc ack request except exception
原文地址:https://www.cnblogs.com/orangeCitrus/p/10203554.html