Существует класс модели "Student", который расширяет ResourceSupport и содержит атрибуты name (строка), age (int), marks (int) и class_leader (Student). Я определил два представления: basicview (применяется для имени и возраста) и fullview (расширяет базовое представление и применяется для отметок и class_leader). Когда я вызываю API, чтобы получить полную информацию обо всех учениках, я ожидаю полного просмотра для каждого ученика с базовым представлением для лидера класса этого ученика. Чтобы добавить это средство, я включил JSONSerializer для атрибута class_leader, и он работает как положено. Но единственная проблема, с которой я сталкиваюсь сейчас, заключается в том, что для class_leader ссылка идет не в формате HAL. Если я не использую сериализатор, отображается полное представление с правильным форматом HAL.
Попробовал аннотировать класс контроллера с помощью @EnableHypermediaSupport (type = [(EnableHypermediaSupport.HypermediaType.HAL)])
Это код сериализатора, который я использую.
class StudentSerializer: JsonSerializer<Any>() {
@Throws(IOException::class, JsonGenerationException::class)
override fun serialize(value: Any?, jgen: JsonGenerator?, provider:
SerializerProvider?) {
var objectMapper = jacksonObjectMapper()
objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL)
//objectMapper.registerModule( Jackson2HalModule())
objectMapper.writerWithView(Views.BaiscView :: class.java).writeValue(jgen, value)
}
}
Expected Result:
{
"_embedded": {
"studentList": [
{
"roll_no":1,
"name": "student1",
"age": 10,
"marks":47,
"class_leader": {
"roll_no":2,
"name": "student2",
"_links": {
"self": {
"href": "http://localhost:9090/class/students/2"
}
}
},
"_links": {
"studentdetail": {
"href": "http://localhost:9090/class/students/1"
}
}
},
...
]
},
"_links": {
"self": {
"href": "http://localhost:9090/class/students/"
}
}
}
Actual Result:
{
"_embedded": {
"studentList": [
{
"roll_no":1,
"name": "student1",
"age": 10,
"marks":47,
"class_leader": {
"roll_no":2,
"name": "student2",
"links": [
{
"rel": "self",
"href":"http://localhost:9090/class/students/2"
}
]
},
"_links": {
"studentdetail": {
"href": "http://localhost:9090/class/students/1"
}
}
},
...
]
},
"_links": {
"self": {
"href": "http://localhost:9090/class/students/"
}
}
}