2017-08-14 5 views
0

Spring MVCプロジェクトを使用して暗号化通貨ウォレットを生成するコードがあります。今Spring MVCのPOST要求値を明示的に使用

@RequestMapping(value = "/generateAddress", method = RequestMethod.POST) 
public ResponseEntity<WalletInfoWrapper> generateAddress(@RequestParam("walletName") String walletName, 
                 @RequestParam("currencyName") String currencyName, HttpServletRequest request) { 

    String wallet_Name = request.getParameter("walletName"); 
    String currency_Name = request.getParameter("currencyname"); 

    System.out.println("wallet_Name = " + wallet_Name + " , currency_Name = " + currency_Name); 

    // return if the wallet name or the currency is null 
    if (Objects.isNull(wallet_Name) || Objects.isNull(currency_Name)) { 
     return new ResponseEntity<WalletInfoWrapper>(HttpStatus.NOT_ACCEPTABLE); 
    } 

    WalletInfo walletInfo = walletService.generateAddress(wallet_Name); 

    if (Objects.isNull(walletInfo)) { 
     return new ResponseEntity<WalletInfoWrapper>(HttpStatus.NOT_ACCEPTABLE); 
    } 

    WalletInfoWrapper walletInfoWrapper = new WalletInfoWrapper(); 
    walletInfoWrapper.setName(walletInfo.getName()); 

    return new ResponseEntity<WalletInfoWrapper>(walletInfoWrapper, HttpStatus.CREATED); 
} 

、私はコードで提供されるwallet_Namecurrency_Nameを分離して、印刷したいと思い、このPOST要求、

curl -X POST -d "walletName=zyx&currencyName=bitcoin" http://localhost:8080/rest/generateAddress 

を作ります。しかし、私がPOSTリクエストをした後、コンソールに何も表示されません。

 String wallet_Name = request.getParameter("walletName"); 
     String currency_Name = request.getParameter("currencyname"); 

     System.out.println("wallet_Name = " + wallet_Name + " , currency_Name = " + currency_Name); 

私はまた、データのJSON形式を使用してPOSTにしようと、私は何の変化を取得していません。ここで何が問題なの?

+0

は、私downvoteする理由を記述してくださいと私は/修正質問を削除します。私はちょっと混乱して、もう一度それを聞かなければなりませんでした。 Btw、以前の質問に「削除」しました。 – Arefe

+1

あなたのメソッドはPOSTのため、あなたの 'curl'はPOSTですが、あなたは' GET'について話しています - 私は混乱しています - また、あなたのparameters'が '@RequestParam(" walletName ")として渡されることに注意してください。あなたのメソッドへの引数 –

+0

@ScaryWombat質問は実際には名前と住所のウォレットを作成する 'POST'に関するものです。 'POST'の後に作成された値をチェックするのに' GET'を使います。パラメータについてはどうしたらよいですか?間違いがある場合は、答えとしてそれを書いてください。 – Arefe

答えて

6

まず、私は、あなたがslf4jような適切なロガーを、System.out.printlnを使用してから切り替えて使用するようにアドバイスします。

spring mvcの使い方に問題があります。 2つのフィールドに既に@RequestPAramが宣言されているので、request.getPrameter("blah")の代わりに直接使用してください。だから、私は@RequestParamを取り除いて、HttpServletRequestを使うか、その逆にすることをお勧めします。

私がここに見た別のものは、あなたが間違っていました。String currency_Name = request.getParameter("currencyname");request.getParameter("currencyName")を実行する必要があります(Nを大文字にします)。

ここにあなたのリクエストに対する私の例があります。私は@RequestParamを使って、request.getParameter()を使って両方を加えました。それは、あなたが使いたいものを選択することです。最近の勧告は@RequestParamを使用することです。

@RestController 
public class WalletController { 

    private final Logger logger = LoggerFactory.getLogger(getClass()); 

    @RequestMapping(value = "/generateAddress", method = RequestMethod.POST) 
    public ResponseEntity<String> generateAddress(@RequestParam("walletName") String walletName, 
                @RequestParam("currencyName") String currencyName, HttpServletRequest request) { 
     logger.info("walletName {} and currencyName {}", walletName, currencyName); 
     String wallet_Name = request.getParameter("walletName"); 
     String currency_Name = request.getParameter("currencyName"); 
     logger.info("walletName {} and currencyName {}", wallet_Name, currency_Name); 

     // DO other Stuff 
     return ResponseEntity.ok(null); 
    } 
} 

要求をテスト:

curl -X POST -d "walletName=my-cool-wallet&currencyName=ETH" http://localhost:8080/generateAddress 

をログを見て:

2017-08-14 10:11:29.972 INFO 29228 --- [nio-8080-exec-1] c.s.s.controller.WalletController  : walletName my-cool-wallet and currencyName ETH 
2017-08-14 10:11:29.972 INFO 29228 --- [nio-8080-exec-1] c.s.s.controller.WalletController  : walletName my-cool-wallet and currencyName ETH 
-2

複数のパラメータを渡そうとしているので、次のようなURLに直接クエリパラメータを指定してPOSTを実行する必要があります。あなたはおそらく、ファイルへのすべての出力ステートメントを持つように一点になるでしょうので、すべての

curl -X POST http://localhost:8080/rest/generateAddress?walletName=zyx&currencyName=bitcoin 
+0

これはうまくいかず、これが正解ではないと思われます – Arefe

+0

ちょっと、私はコードをプルダウンして実行し、それは私のために働く。 私はあなたのcURLステートメントと、私が提案したものと一緒に、適切に変数に分割された値を正しく見ることができました。 ローカルで実行中に気付いた事は、currencyNameの変数名が間違っていることです。 文字列currency_Name = request.getParameter( "currency ** n ** ame"); 文字列currency_Name = request.getParameter( "currency ** N ** ame"); –

関連する問題