2014-02-06 33 views
0

我有一個web應用程序,我在其中使用Spring MVC與Spring Hateoas和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更新爲0.9時,我的Hateoas配置使用HAL(我將仇恨配置添加到我的第一篇文章中)將被忽略。 –

+0

現在我將我的Spring 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"}]}} 
相關問題