Сериализованный объект JSON не имеет свойства @type - PullRequest
0 голосов
/ 22 мая 2019

У меня есть следующий класс 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.

Мой Spring Boot контроллер для сущностей Log выглядит следующим образом:

@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, и добавить информацию о типе к объектам списка содержимого?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...