2017-08-28 68 views
-1

我與Apache CXF工作,春JAX-RS服務,我有以下服務定義和實現提供,的Apache CXF彈簧安置服務POST請求返回「味精」:「流關閉」

定義

@POST 
    @Path("/generateAddress") 
    @Consumes(MediaType.APPLICATION_JSON) 
    @Produces({MediaType.APPLICATION_JSON}) 
    WalletInfo generateAddress(final String walletName, String currencyName); 

的實現

public synchronized WalletInfo generateAddress(final String walletName, String currencyName) { 

     WalletInfo walletInfo = IWalletInfoDao.getWalletInfoWithWalletNameAndCurrency(walletName, currencyName); 
     return walletInfo; 
} 

當我做POST請求與cURLcurl -H "Content-Type: application/json" -X POST -d '{"walletName":"Icecream5500","currencyName":"Bitcoin"}' http://localhost:8080/api/rest/wallet/generateAddress

我得到的JSON迴響應,

{ 
    "msg" : "Stream closed", 
    "date" : "2017-08-28T09:22:027Z" 
} 

我敢肯定的是,generateAddress法正常工作。什麼是
這裏的問題,特別是當你在請求中得到Spring Apache Cxf項目中的消息Stream closed?很顯然,如果需要,我可以提供更多信息。服務器日誌是正常的,我沒有看到任何異常。

+1

在什麼情況下,您收到消息「流關閉」? – yaswanth

+0

我使用cURL執行發佈請求時收到消息。我已提供詳細信息。您可以再次閱讀該問題。 – Arefe

+1

哦,我的壞。我認爲實際響應是Stream關閉而不是JSON。你在執行這個請求時調試代碼嗎? – yaswanth

回答

0

POST正文與該方法的參數不匹配,因此首先創建了該問題。我已在下列選項中解決了該問題。

我創建了一個新的類

public class CreateWalletWithNameAndCurrency { 

    String walletName; 

    String currencyName; 

    public CreateWalletWithNameAndCurrency(String walletName, String currencyName) { 
     this.walletName = walletName; 
     this.currencyName = currencyName; 
    } 

    public CreateWalletWithNameAndCurrency() { 
    } 

    public String getWalletName() { 
     return walletName; 
    } 

    public String getCurrencyName() { 
     return currencyName; 
    } 

    public void setCurrencyName(String currencyName) { 
     this.currencyName = currencyName; 
    } 

    public void setWalletName(String walletName) { 
     this.walletName = walletName; 
    } 
} 

我改變了這樣的POST請求的定義,

@POST 
@Path("generateAddress") 
@Consumes(MediaType.APPLICATION_JSON) 
@Produces({MediaType.APPLICATION_JSON}) 
WalletInfo generateAddress(CreateWalletWithNameAndCurrency createWalletWithNameAndCurrency); 

的實現提供如下,

public synchronized WalletInfo generateAddress(CreateWalletWithNameAndCurrency createWalletWithNameAndCurrency) { 

     String walletName = createWalletWithNameAndCurrency.getWalletName(); 

     String currencyName = createWalletWithNameAndCurrency.getCurrencyName(); 

     WalletInfo walletInfo = iWalletInfoDao.getWalletInfoWithWalletNameAndCurrency(walletName, currencyName); 


    // some more code 
} 

最後,我可以這樣做POST請求,

curl -H "Content-Type: application/json" -X POST -d '{"walletName":"Copenhangen","currencyName":"Bitcoin"}' http://localhost:8080/rest/wallet/generateAddress