Spring Data Rest - _links

Editar 14/08/14 13:29

Minha próxima conclusão é que o formato hal + json produzido a partir do meu @RepositoryRestResource CrudRepository está incorreto.

O tutorial (http://spring.io/guides/gs/accessing-data-rest/) mostra a saída de uma entidade Rest JPA hipermídia como: (observe que não há elemento "rel" e "links" não é uma matriz)

{
   "_links" : {
       "people" : {
           "href" : "http://localhost:8080/people{?page,size,sort}"
       }
   }
 }

No entanto, os documentos de referência (http://docs.spring.io/spring-data/rest/docs/1.1.x/reference/html/intro-chapter.html) mostram que a saída deve ser:

{
    "links" : [ {
        "rel" : "customer",
        "href" : "http://localhost:8080/customer"
      }, {
         "rel" : "profile",
         "href" : "http://localhost:8080/profile"
      }
 }

Alguém sabe por que isso é?

=======================================

Editar 14/08/14: Eu levei minha depuração um passo adiante. Ao fornecer minha própria implementação de uma classe org.springframework.hateoas.ResourceSupport, que inspeciona o json por "_links" em vez de "links", eu dou um passo adiante. O erro é:

"Não é possível desserializar a instância do java.util.ArrayList fora do token START_OBJECT ..... através da cadeia de referência: com.ebs.solas.admin.test.SolicitorDTO [\" _ links \ "]"

Isso ocorre porque a classe org.springframework.hateoas.ResourceSupport parece exigir que o atributo links seja uma matriz json. E, por padrão, a saída json + hal produzida pela Spring Data para uma Entidade Restante não produz uma matriz (não há colchetes):

"_links" : {
  "self" : {
    "href" : "http://localhost:9090/solas-admin-data-api/solicitorFirms/Fxxx"
  },
  "solicitors" : {
    "href" : "http://localhost:9090/solas-admin-data-api/solicitorFirms/Fxxx/solicitor
  }
}

Espero que alguém dos fóruns da Spring possa me ajudar aqui.

==============================================

veja um esboço do meu código de repositório do Spring Data:

@RepositoryRestResource
    public interface SolicitorFirmRepository extends CrudRepository<SolicitorFirm, String> {
}

@Entity
@RestResource
@Table(name="XXXX", schema = "XXX")
public class SolicitorFirm implements Serializable {
}

Isso gera com êxito o seguinte recurso de ódio:

{
"firmNumber" : "FXXXX",
"solicitorType" : "r",
"companyName" : "XXXX",
"address1" : "XXXX",
"address2" : "XXX",
"address3" : "XXX",
"address4" : null,
"phoneNumber" : "XXXXX",
"faxNumber" : "XXXXX",
"county" : "OY",
"_links" : {
    "self" : {
        "href" : "http://localhost:9090/solas-admin-data-api/solicitorFirms/XXXX"
    },
    "solicitors" : {
        "href" : "http://localhost:9090/solas-admin-data-api/solicitorFirms/XXXX/solicitors"
    }
 }

No entanto, quando eu defino um DTO para o uso do lado do cliente / controlador:

import org.springframework.hateoas.ResourceSupport;
public class SolicitorFirmDTO extends ResourceSupport {
   .....
}

e use o seguinte código

RestTemplate rt = new RestTemplate();
String uri = new String("//xxxxx:9090/solas-admin-data-api/solicitors/Sxxxxx");
SolicitorFirmDTO u = rt.getForObject(uri, SolicitorFirmDTO.class, "SXXXX");

Estou tendo o erro a seguir:

com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: campo não reconhecido "_links" (classe com.ebs.solas.admin.test.SolicitorFirmDTO), não marcado como ignorável (7 propriedades conhecidas: xx])

Por alguma razão, o json produzido pelo Spring Data Rest adiciona os links da entidade em_links enquanto a superclasse de recursos HATEOAS esperalinks?

Alguém pode ajudar? este é um problema de versão ou preciso de uma configuração extra para mapear_links paralinks

eu tenteiMappingJackson2HttpMessageConverter e vários tipos de mídiaapplication/json+hal para nenhum proveito.

questionAnswers(3)

yourAnswerToTheQuestion