1。问题当在外部代码或项目中反序列化一个明显不能提供无参构造函数的实例时,Jackson会报找不到构造函数的错误提示信息。那么如何在不修改代码的情况下实现反序列化呢?2.解决方案2.1实现反序列化器Response对象没有提供无参构造函数,但需要实现反序列化函数。@Setter@GetterpublicclassResponse{privateMapheaderMap;私人地图<字符串,字符串>apiMap;publicResponse(MapheaderMap,MapapiMap){this.headerMap=headerMap;this.apiMap=apiMap;}}此时,您可以通过实现JsonDeserializer接口来实现自定义反序列化器。公共类ResponseDeserializerextendsJsonDeserializer{@OverridepublicResponsedeserialize(JsonParserjsonParser,DeserializationContextdeserializationContext)throwsIOException,JacksonException{Map>map=jsonParser.readValueAs(Map.class);MapheaderMap=map.get("headerMap");MapapiMap=map.get("apiMap");返回新的响应(headerMap,apiMap);}}将反序列表化器注册到ObjectMapper中:publicclassObjectMapperUtil{privatestaticObjectMapperobjectMapper=newObjectMapper();static{SimpleModulesimpleModule=newSimpleModule("custom");simpleModule.addDeserializer(Response.class,newResponseDeserializer());objectMapper.registerModule(simpleModule);}publicstaticObjectMappergetObjectMapper(){returnobjectMapper;}/****@paramobject*@return*/publicstaticStringwriteAsPrettyString(Objectobject){尝试{returngetObjectMapper().writerWithDefaultPrettyPrinter().writeValueAsString(object);}catch(JsonProcessingExceptione){e.printStackTrace();}返回空值;}}针对此实现编写的测试如下:字符串jsonStr=ObjectMapperUtil.getObjectMapper().writeValueAsString(响应).println(jsonStr);response=objectMapper.readValue(jsonStr,Response.class);断言.assertNotNull(响应);}}2.2通过MIXMIN和@JsonCreator机制实现先实现@JsonCreator功能的构造函数:@JsonProperty("apiMap")MapapiMap){}}编写测试,注册@JsonCreatorclassResponseTest{@TestvoidtestUseMixin()throwsJsonProcessingException{ObjectMapperobjectMapper=newObjectMapper();objectMapper.addMixIn(Response.class,ResponseMixin.class);响应响应=ResponseUtil.getResponse();字符串jsonStr=objectMapper.writeValueAsString(响应);System.out.println(jsonStr);response=objectMapper.readValue(jsonStr,Response.class);断言。assertNotNull(响应);}}3。综上所述,以上两种方案都可以实现自定义解串器的功能。因此,在实践中遇到问题时,常用的开源方案已经提供了支持,我们要善于利用已有的工具来解决。问题。