2014-02-06 1 views
0

저는 Spring Hateo와 함께 Spring MVC를 HypermediaType HAL과 함께 사용하는 웹 응용 프로그램을 가지고 있습니다. 내 컨트롤러에서는 리소스 클래스를 사용하여 과목 목록을 작성합니다. 문제는 하나의 요소 목록에 넣으면 결과 json의 구조가 2 개의 요소를 넣을 때와 구별된다는 것입니다. 목록에 요소가 하나만있는 경우 목록을 제거하고 단일 개체로 반환합니다. 두 컨트롤러 메서드 아래에서 결과 Json을 붙여 넣습니다.결과 JSON은 다른 구조를 가지고 있습니다

이제는 왜 그런 동작이 발생하는지 알고 싶습니다. 어떻게 Hateoas가 결과 json에서 목록을 사용하도록 강제 할 수 있습니까?

@Controller 
@RequestMapping(value = "/collections") 
public class CollectionController { 

    @RequestMapping 
    public HttpEntity<Resources<Subject>> getOneSubject() { 

     Subject subject = new Subject(); 
     Resources<Subject> subjects = new Resources<>(asList(subject)); 

     return new ResponseEntity<>(subjects, HttpStatus.OK); 
    } 
/*HTTP-Response Body: 
{ 
    "_embedded": { 
     "subject": { 
      "name": null 
     } 
    } 
} 
*/ 


    @RequestMapping 
    public HttpEntity<Resources<Subject>> getTwoSubjects() { 

     Subject subject = new Subject(); 
     Resources<Subject> subjects = new Resources<>(asList(subject, subject)); 

     return new ResponseEntity<>(subjects, HttpStatus.OK); 
    } 
/*HTTP-Response Body: 
{ 
    "_embedded": { 
     "subjectList": [ 
      { 
       "name": null 
      }, 
      { 
       "name": null 
      } 
     ] 
    } 
}*/ 

} 

Hateoas 구성 :

@Configuration 
@EnableHypermediaSupport(type = EnableHypermediaSupport.HypermediaType.HAL) 
public class HateoasConfig { 
} 
+1

? 당신이 불평하는 것이 Spring HATEOAS 0.9에서 수정 된 것처럼 느껴집니다 ... –

+0

Spring HATEOAS 0.8을 사용하고 있습니다. 0.9로 HATEOAS를 업데이트하면 HAL을 사용하는 Hateoas 설정 (첫 번째 게시물에 hateoas 설정을 추가 함)이 무시되므로 0.9가 문제를 해결하면 테스트 할 수 없습니다. –

+0

이제 스프링 HATEOAS 버전을 0.10.0.TRAVERSON-SNAPSHOT으로 업데이트합니다. 무시 된 HAL 구성의 문제가 수정 되었기 때문입니다. 슬프게도 내 첫 번째 게시물에 설명 된 문제가 여전히 존재합니다. –

답변

1

난 당신이 다음 단계 후 실행할 제공된 예제 프로젝트를 얻을 수 있습니다 :

  1. 업그레이드 호환 잭슨 버전을 (2.3.0 이상). Spring HATEOAS 0.10.0.BUILD-SNAPSHOT을 사용하십시오.
  2. 앱을 실행합니다.
  3. curl -v -H "Accept: application/hal+json" http://localhost:8080/api/subjects

결과 : 라이브러리 버전이 사용중인

* Adding handle: conn: 0x7fc072803a00 
* Adding handle: send: 0 
* Adding handle: recv: 0 
* Curl_addHandleToPipeline: length: 1 
* - Conn 0 (0x7fc072803a00) send_pipe: 1, recv_pipe: 0 
* About to connect() to localhost port 8080 (#0) 
* Trying ::1... 
* Connected to localhost (::1) port 8080 (#0) 
> GET /api/subjects HTTP/1.1 
> User-Agent: curl/7.30.0 
> Host: localhost:8080 
> Accept: application/hal+json 
> 
< HTTP/1.1 200 OK 
< Content-Type: application/hal+json 
< Transfer-Encoding: chunked 
* Server Jetty(8.1.14.v20131031) is not blacklisted 
< Server: Jetty(8.1.14.v20131031) 
< 
* Connection #0 to host localhost left intact 
{"_links":{"self":{"href":"http://localhost:8080/api/subjects"}},"_embedded":{"subjectList":[{"name":"foo"}]}}