2015-03-03 6 views
0

Я использую Spring Boot и HATEOAS для создания API REST, и я борюсь с созданием кюри. Руководство Spring HATEOAS говорит, что для того, чтобы автоматически вставить кюри в ответах, вы должны сделать следующее:Curies Spring HATEOAS

@Configuration 
@EnableWebMvc 
@EnableHypermediaSupport(type= {HypermediaType.HAL}) 
public class Config { 

    @Bean 
    public CurieProvider curieProvider() { 
    return new DefaultCurieProvider("ex", new UriTemplate("http://www.example.com{#rel}")); 
    } 
} 

Мой класс конфигурации, как это:

@SpringBootApplication 
public class ApiApplication { 

    public static void main(String[] args) { 
    SpringApplication.run(ApiApplication.class, args); 
    } 

    @Bean 
    public CurieProvider curieProvider() { 
    return new DefaultCurieProvider("xpto", new UriTemplate("http://www.xpto.com{#rel}")); 
    } 
} 

Я пытался добавить @ EnableWebMvc в мой конфигурационный класс, но он изменяет рендеринг ответа (hal), и кюри не появляется. Я должен что-то сделать на контроллере, чтобы создать кюри?

Обновление: Я обновил Spring Hateoas (до 0.17.0.RELEASE), и теперь мое имя коллекции визуализируется с кюри, но кюри не появляется в разделе _links:

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

Если добавить одну ссылку в раздел _links затем появляется ссылка кюри:

{ 
    "_links": { 
     "self": { 
      "href": "http://localhost:8080/technologies" 
     }, 
     "mycurie:xpto": { 
      "href": "http://localhost:8080/xpto" 
     }, 
     "curies": [ 
      { 
       "href": "http://localhost:8080/rels/{rel}", 
       "name": "mycurie", 
       "templated": true 
      } 
     ] 
    }, 
    "_embedded": { 
     "mycurie:technology": [ 
      { 
       "id": 1, 
       "description": "A", 
       "_links": { 
        "self": { 
         "href": "http://localhost:8080/technologies/1" 
        } 
       } 
      }, 
      { 
       "id": 2, 
       "description": "B", 
       "_links": { 
        "self": { 
         "href": "http://localhost:8080/technologies/2" 
        } 
       } 
      } 
     ] 
    } 
} 

Это мой контроллер:

@RestController 
@ExposesResourceFor(Technology.class) 
@RequestMapping(value = "/technologies") 
public class TechnologyRestController { 

    ... 

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

} 

ответ

0

Ваш конфигурационный класс выглядит корректно для меня, однако для HypermediaAutoConfiguration для Spring Boot требуется org.springframework.plugin:spring-plugin-core, необязательная зависимость Spring HATEOAS, которая находится в пути к классам для его включения. Я предполагаю, что вам не хватает этой зависимости. Попробуйте добавить зависимость от org.springframework.plugin:spring-plugin-core:1.1.0.RELEASE.

+0

У меня есть эта зависимость от моего пом. Единственное, что не работает, это кюри. Кроме того, представления, возвращаемые API, отображаются как ожидалось (HAL). –

Смежные вопросы