Spring MVC Jackson 消息转换器:“冲突的设置器定义”

Posted

技术标签:

【中文标题】Spring MVC Jackson 消息转换器:“冲突的设置器定义”【英文标题】:Spring MVC Jackson message converter: "Conflicting setter definitions" 【发布时间】:2019-09-01 07:10:48 【问题描述】:

我有一个带有控制器的 Spring Boot 应用程序,该控制器具有一个接受对象作为参数的端点,如下所示:

@RestController
public class MyController 
    @PostMapping("/Student")
    public String createStudent(@RequestBody Student student) 
        //validate and persist Student object
        return "ok";
    

我的问题是 Student 对象有一个重载的 setter 方法,每当我 POST 到这个端点时,我都会收到一个 Jackson 错误,指出存在冲突的 setter 方法并且它无法解析。

我在网上搜索过,似乎解决方案是将 @JsonIgnore 添加到 setter 方法之一,但是 Student 对象来自第 3 方库,我根本无法编辑它。

那么我该如何解决呢?有没有一种简单的“春天”方式来完成这项工作?我尝试过修改 Spring 的 Jackson HTTP 消息转换器,但没有成功

【问题讨论】:

【参考方案1】:

使用MixIn 功能。

interface StudentMixIn 
    @JsonIgnore
    void setName(String name);

并在ObjectMapper 中注册,覆盖Jackson 消息转换器。

另见:

Dynamic addition of fasterxml Annotation? Jackson conditional @JsonUnwrapped Jackson parse json with unwraping root, but without ability to set @JsonRootName

【讨论】:

以上是关于Spring MVC Jackson 消息转换器:“冲突的设置器定义”的主要内容,如果未能解决你的问题,请参考以下文章

spring mvc json 直接把一个对象转换成json格式输出到jsp页面

Spring MVC框架 学习笔记总结

JSON Spring Web MVC 转换:(错误:java.lang.NoSuchMethodError:org.codehaus.jackson.type.JavaType.isMapLikeT

jquery ajax向spring mvc controller中传值并接受及解析返回值

jquery ajax向spring mvc controller中传值并接受及解析返回值

jquery ajax向spring mvc controller中传值并接受及解析返回值