2015-03-02 4 views
9

Sto utilizzando Spring Boot e HATEOAS per creare un'API REST e quando la mia API restituisce una raccolta, è racchiusa all'interno di una proprietà "_embedded", in questo modo:Come rimuovere la proprietà "_embedded" in primavera HATEOAS

{ 
    "_links":{ 
     "self":{ 
     "href":"http://localhost:8080/technologies" 
     } 
    }, 
    "_embedded":{ 
     "technologies":[ 
     { 
      "id":1, 
      "description":"A", 
      "_links":{ 
       "self":{ 
        "href":"http://localhost:8080/technologies/1" 
       } 
      } 
     }, 
     { 
      "id":2, 
      "description":"B", 
      "_links":{ 
       "self":{ 
        "href":"http://localhost:8080/technologies/2" 
       } 
      } 
     } 
     ] 
    } 
} 

voglio la risposta di essere come questo:

{ 
    "_links":{ 
     "self":{ 
     "href":"http://localhost:8080/technologies" 
     } 
    }, 
    "technologies":[ 
     { 
     "id":1, 
     "description":"A", 
     "_links":{ 
      "self":{ 
       "href":"http://localhost:8080/technologies/1" 
      } 
     } 
     }, 
     { 
     "id":2, 
     "description":"B", 
     "_links":{ 
      "self":{ 
       "href":"http://localhost:8080/technologies/2" 
      } 
     } 
     } 
    ] 
} 

mio TechnologiesController:

@RestController 
@ExposesResourceFor(Technology.class) 
@RequestMapping(value = "/technologies") 
public class TechnologiesController { 
    ... 
    @ResquestMapping(method = RequestMethod.GET, produces = "application/vnd.xpto-technologies.text+json") 
    public Resources<Resource<Technology>> getAllTechnologies() { 
     List<Technology> technologies = technologyGateway.getAllTechnologies(); 
     Resources<<Resource<Technology>> resources = new Resources<Resource<Technology>>(technologyResourceAssembler.toResources(technologies)); 
     resources.add(linkTo(methodOn(TechnologiesController.class).getAllTechnologies()).withSelfRel()); 
     return resources; 
    } 

La classe di configurazione ha l'annotazione @EnableHypermediaSupport (type = EnableHypermediaSupport.HypermediaType.HAL).

Qual è il modo migliore per produrre la risposta senza "_embedded"?

+1

Se si rimuove '_embedded' dalla risposta, la risposta non sarà più valida HAL. Devi o restare con '_embedded' o usare un tipo di supporto diverso. –

+0

La bozza HAL dice "La proprietà riservata" _embedded "è FACOLTATIVA" –

+2

È opzionale in quanto una risorsa non deve disporre di risorse incorporate. Tuttavia, se lo fa, allora dovrebbero essere sotto '_embedded'. –

risposta

5

L'aggiunta di questo Accept intestazione alla richiesta:

Accept : application/x-spring-data-verbose+json 
6

Come il documentation dice risposte

applicativi/hal + JSON devono essere inviate alle richieste che accettano application/json

Per omettere _embedded nella tua risposta dovrai aggiungi

spring.hateoas.use-hal-as-default-json-media-type=false 

a application.properties.