1. Atributo na documentação deveria aparecer _links mas está como links

    Solucionada
    Fórum Especialista Spring REST Discoverability e HATEOAS: A Glória do REST Corrigindo as propriedades de links na documentação
    Bom dia! Terminei esse módulo de HATEOAS mas não encontrei perguntas sobre esse ponto então gostaria de entender o que pode estar acontecendo no meu projeto. Estou utilizando SpringFox 3.0 e na documentação todos os locais onde tem a propriedade de links está ficando com o nome "link", porém o correto e que está retornando na resposta da API é "_links".
    {
      "_embedded": {
        "cidades": [
          {
            "estado": {
              "id": 1,
              "links": {
                "rel": {
                  "href": "string",
                  "templated": true
                }
              },
              "nome": "Paraná"
            },
            "id": 1,
            "links": {
              "rel": {
                "href": "string",
                "templated": true
              }
            },
            "nome": "Campo Mourão"
          }
        ]
      },
      "_links": {
        "rel": {
          "href": "string",
          "templated": true
        }
      }
    }
    Só ficou correto nas listagens, porque criamos um modelo de representação que já possui o atributo _links. Comparei com o código no repositório e está tudo certo. Tem alguma coisa que precisa alterar por estar utilizando o SpringFox 3.0? Segue o link do repositório: https://github.com/marcosfalves/algafood-api/ Utilizar a branch MOD-19 que possui o código até o final deste módulo.
    3 Respostas
  2. Olá Marcos, bom dia! Infelizmente na nossa versão os links também permanecerão assim. Não localizei nenhuma opção de customização global no SpringFox. Teremos duas opções, uma seria criar uma classe chamada CidadeCollectionModelOpenApi, e lá criar uma propriedade _links. Ou na classe CidadeModel, adicionar a seguinte propriedade:
        @JsonProperty("_links")
        @Override
        public Links getLinks() {
            return super.getLinks();
        }
    Assim o SpringFox irá ler a configuração do Jackson.
  3. Bom dia Alex! Muito obrigado por sua resposta, realmente utilizando o JsonProperty funciona. Isso me deu uma direção nas pesquisas e consegui elaborar uma solução global. analisando [essa issue do spring hateoas](https://github.com/spring-projects/spring-hateoas/issues/111) identifiquei que existe classes Mixin para configurar o suporte ao HAL no spring hateoas. Seguindo a [doc do spring fox](https://springfox.github.io/springfox/docs/current/) no item 6.1 identifiquei que tem como personalizar o objetMapper que ele utiliza. Então registrei esse módulo no object mapper do springfox e resolveu esse problema de forma global.
    package com.algaworks.algafood.core.springfox;
    
    import org.springframework.context.ApplicationListener;
    import org.springframework.hateoas.mediatype.hal.Jackson2HalModule;
    import org.springframework.stereotype.Component;
    import springfox.documentation.schema.configuration.ObjectMapperConfigured;
    
    @Component
    public class HALSupportSpringFox implements ApplicationListener<ObjectMapperConfigured> {
        @Override
        public void onApplicationEvent(ObjectMapperConfigured event) {
            event.getObjectMapper().registerModule(new Jackson2HalModule());
        }
    }
  4. Olá Marcos muito obrigado pelo retorno! Isso certamente servirá de grande ajuda. Realmente o SpringFox usa um ObjectMapper diferente do Spring, e não conhecia como customizá-lo. Futuramente, acredito que essa configuração não será necessária no módulo do SpringDoc.