作者回复: 如果我说因为国外JacksonJSON用的人比FastJSON的多,你能接受么……FastJSON在国外的流行程度和国内不一样,就好像前几年老外都不知道Dubbo一样。
作者回复: 其实没什么大关系,WebMvcConfigurationSupport 是Spring MVC里用来辅助配置的,而WebMvcAutoConfiguration是Spring Boot用来做WebMVC的自动配置的。
作者回复: 这是个好问题,我从来没有想过……为此我去翻了一下代码,从JpaRepository.getOne()开始,一直找到了DefaultLoadEventListener.proxyOrLoad(),这里就会返回我们看到的代理对象。getByName()是我们自定义的,走了Spring Data JPA的Repository另外的一条生成Query的分支,所以没有再做代理。
作者回复: 没有什么普通Jackson XML格式,大家都是标准的XML格式。你看到返回HibernateProxy是因为这个方法的返回值是Hibernate为了做延时加载的代理,所以本身的类型是这样的。而那些没有经过lazy-loading处理的返回就是普通的POJO对象了,他们经过序列化后就没有HibernateProxy这些字样。
作者回复: 提个建议,不要去覆盖常见类型的,你可以针对你的特殊类型去做定义,一般我们序列化的肯定是个对象POJO类型,你对POJO整个类型去定制序列化器,这样可能效果更好点。 直接对常见类型下手,在日后变动中可能会带来潜在的风险,那时你根本就想不起来自己把最基础的类型序列化给覆盖了。
作者回复: 你把它想象成我在实现接口写匿名类吧。这个接口的方法参数就是builder。这是lambda表达式,可以了解一下。
作者回复: Hibernate这边有懒加载机制,一开始没有用过所以返回的就是null。 Hibernate5Module是用来让JacksonJSON支持Hibernate返回的对象类型的,你以为返回的是CoffeeOrder,但实际是Hibernate增强过的一个类型。
作者回复: 你这个问题应该是提在下一个视频里的吧。因为有一个带@ModelAttribute的coffeeList(),所以各个方法返回的Model里都会有一个coffeeList的属性。
作者回复: 不是说它是个容器,而是说它也有扩展点,可以把自己写的一些扩展注册进去,序列化器和反序列化器写好之后是要让Jackson知道它们的存在后才能发挥作用的。
作者回复: 你想问的是JsonComponent吧,而不是MessageConverter,JsonCompont是让JacksonJson来支持我们自定义类型转换的。Formatter不适用在JacksonJson里。