java - JsonMappingException : no single-String constructor/factory method

标签 java json jackson2

[这不是 Can not instantiate value of type from JSON String; no single-String constructor/factory method 的副本:它是一个简单得多的 POJO 和 JSON。我的解决方案也不同。]

我想从中解析并创建 POJO 的 JSON:

{
    "test_mode": true,
    "balance": 1005,
    "batch_id": 99,
    "cost": 1,
    "num_messages": 1,
    "message": {
        "num_parts": 1,
        "sender": "EXAMPL",
        "content": "Some text"
    },
    "receipt_url": "",
    "custom": "",
    "messages": [{
        "id": 1,
        "recipient": 911234567890
    }],
    "status": "success"
}

如果响应恰好是一个错误,它看起来像:

{
    "errors": [{
        "code": 80,
        "message": "Invalid template"
    }],
    "status": "failure"
}

这是我定义的 POJO:

@Data
@Accessors(chain = true)
public class SmsResponse {

    @JsonProperty(value = "test_mode")
    private boolean testMode;

    private int balance;

    @JsonProperty(value = "batch_id")
    private int batchId;

    private int cost;

    @JsonProperty(value = "num_messages")
    private int numMessages;

    private Message message;

    @JsonProperty(value = "receipt_url")
    private String receiptUrl;

    private String custom;

    private List<SentMessage> messages;

    private String status;

    private List<Error> errors;

    @Data
    @Accessors(chain = true)
    public static class Message {

        @JsonProperty(value = "num_parts")
        private int numParts;

        private String sender;

        private String content;
    }

    @Data
    @Accessors(chain = true)
    public static class SentMessage {

        private int id;

        private long recipient;
    }

    @Data
    @Accessors(chain = true)
    public static class Error {

        private int code;

        private String message;
    }

}

注解@Data(告诉Lombok自动为类生成getters、setters、toString()hashCode()方法)和 @Accessors(告诉 Lombok 以可以链接的方式生成 setter)来自 Project Lombok

似乎是一个简单的设置,但每次我运行时:

objectMapper.convertValue(response, SmsResponse.class);

我收到错误信息:

Can not instantiate value of type [simple type, class com.example.json.SmsResponse]
from String value ... ; no single-String constructor/factory method

为什么我需要一个用于SmsResponse 的单字符串构造函数,如果需要,我在其中接受哪个字符串?

最佳答案

要使用 ObjectMapper 解析和映射 JSON 字符串,您需要使用 readValue 方法:

objectMapper.readValue(response, SmsResponse.class);

关于java - JsonMappingException : no single-String constructor/factory method,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46034987/

相关文章:

java - 增加一个长值(日期)

java - 在 Android Studio 中将 Java 文件传输到 Kotlin

Java 到 Kotlin 泛型的翻译

jquery - 发送 JSON 内容类型 + JavaScript 对象(jQuery ajax)

ruby - Yajl::ParseError:词法错误:json 文本中的字符无效

java - Jackson——使用 xpath 或类似工具解析 json

java - 尝试设置数组元素约束

c# - 解码 JSON Web token (Xamarin.Android)

java - 如何使用 JsonIter 从 json 获取特定的键值,通过使用任何可用的 getter 方法?

java - 在没有对象映射器的情况下将对象转换为 Jackson 中的 JSON 文件