gpt4 book ai didi

java - Spring 3 的 ResponseBody 忽略 @JsonTypeInfo

转载 作者:行者123 更新时间:2023-11-30 03:19:48 31 4
gpt4 key购买 nike

我无法让 spring 返回带有定义类的附加属性的对象的序列化。

我的类(class)是:

@JsonTypeInfo(use=JsonTypeInfo.Id.NAME, include= JsonTypeInfo.As.PROPERTY, property="ObjectType")
@JsonSubTypes({
@JsonSubTypes.Type(value=LiteStudy.class, name="LiteStudy")
})
public class Entity {
...
}


@JsonTypeName("LiteStudy")
@JsonSubTypes({
@JsonSubTypes.Type(value=Study.class, name="Study")
})
public class LiteStudy extends Entity {
...
}


@JsonTypeName("Study")
public class Study extends LiteStudy{
...
}

在我的单元测试中,Study 实例已正确序列化,具有该类的额外属性:

{"ObjectType":"Study",
...
}

使用这个很简单:

ObjectMapper mapper = new ObjectMapper();
mapper.readValue(studyJSON,study.getClass());

但是,在我的 Spring Rest Web 服务模块中,该研究是在没有“ObjectType”属性的情况下进行序列化的。

Controller 看起来像这样(简化):

@ResponseBody
public RestResponse<Study> getStudyById(@PathVariable("studyIdentifier") String studyIdentifier) throws DAOException {

return getStudyRestResponse(studyIdentifier);
}

编辑:添加 RestResponse(简化)

public class RestResponse<Content> {

private Content content;
private String message;
private Exception err;

public Content getContent() {
return content;
}

public void setContent(Content content) {
this.content = content;
}

public String getMessage() {
return message;
}

public void setMessage(String message) {
this.message = message;
}

public Exception getErr() {
return err;
}

public void setErr(Exception err) {
this.err = err;
}

知道为什么 spring 似乎忽略了 @JsonType 注释吗?

最佳答案

尝试仅返回您需要的对象,不要将其包装在通用包装类中。您的问题与 Java 类型删除有关。查看更多信息here

@ResponseBody
public @ResponseBody Study getStudyById(@PathVariable("studyIdentifier") String studyIdentifier) throws DAOException {

return studyIdentifier;
}

关于java - Spring 3 的 ResponseBody 忽略 @JsonTypeInfo,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31605596/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com