spring-mvc - 如何使用 Builder Pattern 和 @JsonDeserialize 使用 Spring RestTemplate 反序列化响应 json

标签 spring-mvc jackson resttemplate

如何配置 RESTTemplate 以使用 Jackson 的 @JsonDeserialize 反序列化响应 Json?

我的域类基于构建器模式和 jackson 的 @JsonDeserialize marshall 和 unmarshall 在单元测试中很好。但是,当与 Spring 的 RESTTemplate (Spring 3.1) 结合使用时,它会失败。

域类:

@JsonDeserialize(builder = Policy.Builder.class)
public final class Policy implements Comparable, Serializable {

    // immutable attributes

    private Policy(Builder builder) {
        ...
    }

    @JsonIgnoreProperties(ignoreUnknown = true)
    public static class Builder {

        /// withXXX methods 

        public Policy build() {
            return new Policy(this);
        }
    }
}

单元测试中的 Spring RESTTemplate 代码:

Policy policy = new Policy.Builder().withXXX()...build();
restTemplate.postForObject("http://localhost:8080/policies/policy.json", policy, String.class);

RestTemplate#doExecute() 中的错误 - 第 436 行:

org.springframework.web.client.HttpServerErrorException: 500 Could not instantiate bean    
class [xxx.domain.Policy]: No default constructor found; nested exception is 
java.lang.NoSuchMethodException: xxx.domain.Policy.()

最佳答案

如果已经定义了构造函数,则需要包含默认构造函数。

关于spring-mvc - 如何使用 Builder Pattern 和 @JsonDeserialize 使用 Spring RestTemplate 反序列化响应 json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13457985/

相关文章:

spring - 我应该为 GWT 应用程序构建 REST 后端吗

java - 通过 GET 方法重定向到 j_spring_security_check

java - 在使用带有自定义消息源的 hibernate validator 时如何转义参数

java - 无法使用 jackson 将具有内部对象的JSON解析为Java对象

java - 使用 Jackson 反序列化(未知属性失败)不会忽略鉴别器属性(DTO 使用 SwaggerCodegen 创建)

java - 如何防止 CsvMapper 在输出 CSV 中包含无法识别的字段?

java - Spring MVC 显示日期变量

spring - 用于 Spring 项目中生产代码的 RestTemplate vs Apache Http Client

spring - 在 Spring RestTemplate 中设置 Authorization header

java - 如何将 ArrayList/Set 转换为 JSON 并使用 postforobject 方法发布数据?