我有一个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之类的搜索方法的响应,并将类型信息添加到内容列表的对象中?