所以我有一个Spring MVC应用程序,它使用JSON作为响应主体公开了REST API。同时,一些较低层的服务返回集合或地图,其实现使用Guava来提供它们的不可变实现。当Spring使用Jackson将响应对象转换为JSON字符串时,就会出现问题。我得到这个奇怪的例外:
HttpMessageNotWritableException could not write content: [no message for java.lang.NullPointerException]; nested exception is com.fasterxml.jackson.databind.JsonMappingException
调试时,我看到NullPointerException
尝试访问其com.fasterxml.jackson.databind.ser.std.MapSerializer
时keySerializer
上升,这是空的。我似乎无法配置或绕过(甚至不了解发生了什么)。
我还尝试通过这种方式注册GuavaModule
(来自jackson-databind-guava
)项目,但没有运气:
@Configuration
@EnableWebMvc
public class Conf extends WebMvcConfigurerApdapter {
@Autowired
private ObjectMapper mapper;
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
MappingJackson2HttpMessageConverter messageConverter = new MappingJackson2HttpMessageConverter();
mapper.registerModule(new GuavaModule());
messageConverter.setObjectMapper(mapper);
converters.add(messageConverter);
}
// ...
一些背景信息:使用spring-webmvc-4.3.0.RELEASE
,jackson-core-2.8.9
(由于某种原因在类路径中还有几个1.9.2 jackson库)和guava-23.63-jre
。