问题1
在看 SpringMVC源码剖析(五)-消息转换器HttpMessageConverter 的时候,在 org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor 中看到如下代码:
protected AbstractMessageConverterMethodProcessor(List<HttpMessageConverter<?>> converters) {
this(converters, (ContentNegotiationManager)null);
}
一时间没有反应过来为什么要强转null。
因为之前测试过,null 强转之后,就可以调用相应类的静态方法。一时间就想岔了---特别是没再注意这里是构造方法。
上网求助,有人回复一针见血,这就是为了区别不同的构造方法。
因为,如果有构造方法如下:
public class X {
X(A a, B b){ ... };
X(A a, C c){ ... };
}
那么,调用 X( a, null ) 时,就不知道是哪一个构造方法了!
所以,这时就需要强转一下,以便区分。
问题2
跟同事聊起来iOS解析json遇到null就会崩溃的问题。
虽然我坚定的认为这是iOS的解析工具太弱--毕竟json是通用格式,但是问题还是需要解决的。
简单的办法就是使用Jackson标注实体类,忽略值为null的属性。
@JsonInclude(Include.NON_NULL)
参考
jackson 实体转json 为NULL或者为空不参加序列化