2011-10-01 72 views
2

我已經使用以下Roo腳本(Roo 1.1.5)創建了基本的RESTful Roo應用程序。從RESTful Roo應用程序需要應用程序/ json

project --topLevelPackage com.roorest 
persistence setup --provider HIBERNATE --database HYPERSONIC_IN_MEMORY 
entity --class ~.domain.MyClass 
field string --fieldName String1 
web mvc setup 
web mvc all --package ~.web 
json all 

當我訪問REST風格的WS要求應用/ JSON的WS吐出一個有效的JSON體,但是內容類型設置爲應用程序/文本(這使得如果着眼於產生(AJ完美的意義)控制器代碼在後臺打勾)。

不幸的是,我需要讓WS返回一個application/json的內容類型。我試圖從JSON控制器中推入必要的方法,但這看起來很麻煩,2)沒有真正的工作(我在推送源代碼時遇到了很多錯誤)。

可以迫使WS返回應用程序/ json的一般基礎?例如,是否可以將ContentNegotiatingViewResolver與roo生成的aj控制器結合使用? (?又爲何在Roo生成代碼,明確設置應用程序/文本,因爲它是擺在首位內容類型是黑客攻擊的袋鼠JSON插件可行的解決方案)

我想我要問的是這樣的:你認爲做一個roo scaffolded應用程序的最好方法是通過一個WS返回域對象作爲application/json嗎?

回答

2

你解決了這個問題嗎,因爲我只是擁有同一個......?

好吧,我有一個解決方案:方法添加到您的控制器,不要讓AOP框架添加它們:

@RequestMapping(headers = "Accept=application/json") 
@ResponseBody 
public ResponseEntity<String> listJson() { 
    HttpHeaders headers = new HttpHeaders(); 
    headers.add("Content-Type", "application/json; charset=utf-8"); //was app/text 
    return new ResponseEntity<String>(Customer.toJsonArray(Customer 
      .findAllCustomers()), headers, HttpStatus.OK); 
} 
+0

是啊...這就是我終於實現了我自己。不過,真的不盡如人意。我現在正在客戶端工作,所以最近沒有這麼多想法。我只是不明白爲什麼他們不斷添加應用程序/文本。它不符合官方文檔http://stackoverflow.com/questions/477816/the-right-json-content-type。 – conciliator

+0

@Alexander。你把這個放在Controller_Roo_Controller_Json.aj文件中嗎?我以爲我們不想修改這個文件? – okysabeni

+0

不要只覆蓋控制器中的listJson方法。帶有ITD的AOP框架確實認識到,該方法已經存在,並從* .aj文件中刪除該方面。 – Alexander