序列化的JSON对象没有@type属性

时间:2019-05-22 08:52:07

标签: java json spring-boot inheritance jackson

我有一个Log类,如下所示:

@JsonTypeInfo(use = JsonTypeInfo.Id.NAME)
public class Log {
    private Timestamp creationTime;
}

我还有另一个从Log继承的类,如下所示:

@JsonTypeName("LoginLog")
public class LoginLog extends Log {
    private String username;
}

还有一些其他类,例如LoginLog,它们是从Log继承的。

我的Log实体的Spring Boot控制器是这样的:

@RestController
@RequestMapping("/log")
public class LogController {
    @GetMapping("last/five/log")
    public List<Log> lastFiveLog() {
        return logService.lastFiveLog();
    }

    @PostMapping("search/{page}/{size}")
    public Page<Log> search(@RequestBody LogFilter logFilter, @PathVariable Integer page, @PathVariable Integer size) {
       return logService.search(logFilter, page, size);
    }
}

当我向lastFiveLog RESTful服务发送请求时,得到的响应如下:

[
    {
        "@type": "LoginLog",
        "creationTime": 123192837419,
        "username": "admin"
    }
]

但是搜索RESTful服务的结果是这样的,并且在结果对象中不包含@type属性。

{
    "content": [
        {
            "creationTime": 123192837419,
            "username": "admin"
        }
    ],
    "totalElements": 1,
    "first": true,
    "last": true,
    ...
}

所以我无法反序列化响应,因为杰克逊无法发现该对象是哪个子类的实例。有什么方法可以更改诸如lastFiveLog之类的搜索方法的响应,并将类型信息添加到内容列表的对象中?

0 个答案:

没有答案