我正在尝试使用Retrofit和Jackson来反序列化一个API。我得到的onFailure错误没有创造者,像默认构造,存在):不能从对象值反序列化(没有委托或基于属性的创造者。
当前回答
我在这里搜索这个错误:
No Creators, like default construct, exist): cannot deserialize from Object value (no delegate- or property-based Creator
与Retrofit无关,但如果您正在使用Jackson,则通过向抛出错误的类添加默认构造函数来解决此错误。 更多信息请点击:https://www.baeldung.com/jackson-exception
其他回答
当您使用Lombok builder时,您将得到上述错误。
@JsonDeserialize(builder = StationResponse.StationResponseBuilder.class)
public class StationResponse{
//define required properties
}
@JsonIgnoreProperties(ignoreUnknown = true)
@JsonPOJOBuilder(withPrefix = "")
public static class StationResponseBuilder {}
参考:https://projectlombok.org/features/Builder与杰克逊
我有一个类似的问题(使用Jackson, lombok, gradle)和一个没有args构造函数的POJO -解决方案是添加
lombok.anyConstructor.addConstructorProperties=true
去龙目岛。配置文件
我的问题原因对我来说似乎很不寻常,不确定是否有人在相同的条件下得到错误,我通过不同之前的提交找到了原因,在这里:
通过我的构建。gradle我正在使用这2个编译器选项,并注释掉这一行固定的问题
//compileJava.options.compilerArgs = ['-Xlint:unchecked','-Xlint:deprecation']
原因:发生此错误是因为jackson库不知道如何创建没有空构造函数的模型,并且模型包含带有参数的构造函数,该构造函数没有使用@JsonProperty("field_name")注释其参数。默认情况下,如果你没有给你的类添加构造函数,java编译器会创建空构造函数。
解决方案: 向模型中添加一个空构造函数或使用@JsonProperty("field_name")注释构造函数参数
如果你使用Kotlin数据类,那么也可以用@JsonProperty("field_name")进行注释,或者将jackson模块Kotlin注册到ObjectMapper。
您可以使用http://www.jsonschema2pojo.org/创建您的模型。
在下面的用例中遇到相同的错误。
我尝试使用sprint引导(2.0.0快照版本)在各自的bean中没有默认构造函数的情况下达到Rest(Put映射)端点。
但是在最新的Spring Boot版本(2.4.1版本)中,同一段代码可以正常运行。
因此在最新版本的Spring Boot中不再需要bean默认构造函数
推荐文章
- 杰克逊克服下划线,支持骆驼案
- 如何在TextView中添加一个子弹符号?
- PreferenceManager getDefaultSharedPreferences在Android Q中已弃用
- 在Android Studio中创建aar文件
- 修改抽射超时时间
- 如何通过数据从第二个活动到第一个活动时按回?——安卓
- 如何在android中获得当前前景活动上下文?
- 如何在Android中获取当前日期?
- 在序列化和反序列化期间JSON属性的不同名称
- 获取Android设备名称
- 在WebView中上传文件
- 加载HTML文件到WebView
- Android:为什么视图没有maxHeight ?
- 如何获得具有已知资源名称的资源id ?
- 在Android上将字符串转换为整数