Как преобразовать не HAL формат в формат HAL для вложенной сущности - PullRequest
0 голосов
/ 24 марта 2019

Существует класс модели "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/"
        }
    }
}

...