2017-02-07 5 views
1

マイRequestController:バインド要求のマッピング(Springboot)

@Controller 
@RequestMapping("/request") 
public class RequestsController { 

    private static final Logger log = LoggerFactory.getLogger(TmtApplication.class); 

    @Autowired 
    RequestRepository requestRepository; 

    @Autowired 
    UsersRepository usersRepository; 

    @RequestMapping("/save") 
    String saveRequest() 
    { 
     Request requestObj = new Request(usersRepository.findOne(1L), new Date()); 
     requestObj.setDescription("I got so bored"); 
     requestObj.setStatus(false); 
     requestObj.setRequestDate(new Date()); 
     requestRepository.save(requestObj); 
     return "index"; 
    } 
} 

マイボタン:

<input type="submit" value="Submit Request" style="display: block;"> 

私はこの要求をオフに発射する私のボタンを取得しようとしています。私のHTMLに追加して/ saveの呼び出しを開始するにはどうすればよいですか?

更新:

フォーム:

<form action="/request/save" method="post" commandName="requestData"> 
    <input type="text" id="dateInput" value="" style="display: none;"/> 
    <div style="width: 200px;"><input type="submit" value="Submit Request" style="display: block;"> 
    </div> 
</form> 

コントローラー:

@RequestMapping(value = "/save", method = RequestMethod.POST) 
    String saveRequest(@ModelAttribute("requestData") Request requestData, Map<String, Object> map, 
         HttpServletRequest request) 
    { 
     Request requestObj = new Request(usersRepository.findOne(1L), new Date()); 
     requestObj.setDescription(requestData.getDescription()); 
     requestObj.setStatus(false); 
     requestObj.setRequestDate(requestData.getRequestDate()); 
     requestRepository.save(requestObj); 
     return "save"; 
    } 

答えて

1

ことですが、そのまま、あなたとあなたのタグを囲む必要があり、これは春のコードを使用して動作するように取得するには形。

<form action="save"> 
    <input type="submit" value="Submit Request" style="display: block;"> 
</form> 

さらに、正しいURLから呼び出す必要があります。フォームアクションは、現在開いているページを基準にすることも、URLのルートを基準にすることもできます。

あなたがに解決RequestMappingをヒットするには、2つのオプションが、持っている:

/request/save 

一つは、相対的なアクションを使用することです。

{server:port}/request 

、その後、あなたの行動は次のようになります:あなたは、次のURLでごHTMLを提供するために必要があります

"save" 

番目のオプションは、フォームアクションのための絶対パスを使用することです。

"/request/save" 

このサーバーでHTMLが配信されている場所はどこからでも動作します。あなたは何か(フォーム)を提出し、どこ(アクション)に提出することを指示する必要があり

概要

。したがって、URL、フォーム、送信エンドポイントを同期させる必要があります。

また、POST/GETを別々に処理できるように、RequestMappingでリクエストメソッドを指定することをお勧めします。 Spring Documentationによると、デフォルトの動作では、すべてのHTTPメソッドをマップすることです:@RequestMappingは、デフォルトですべてのHTTPメソッドをマップするため

上記の例では、など をPUT、POST対GET指定し、しません。

フォーム送信のPOSTを指定することをお勧めします。

@RequestMapping(value = "/save", method = RequestMethod.POST) 

フォーム送信ので、これは、フォームの内容がリクエストボディに行くように、POSTアクションであるべきであり、最終的にはあなたはそれがあなたのフォームからフィールドに取ることになるでしょう、あなたが行くべき方向であり、 POSTのためにそれらをControllerクラスのオブジェクトにマップします。

いくつかのヒント:

が(多くの場合、彼らのチュートリアルであり、スプリング)Thymeleafのようなテンプレートエンジンを使用することを検討して、またはJSPタグライブラリは+。 Thymeleafはもう少し軽量で、もしあなたがそれを使うならば、Springが多くの事例を書いたやり方でやることができるでしょう。たとえば、このチュートリアルを参照してください:

また

Spring Boot: Handling Form Submission

それは次のようになり、誰かがちょうど要求マッピングをテストしようとしている、またはあなたは自分のMVCのエンドポイントは、あなたが何を考えてやっていることを確認しようとしている場合あなたの要求を提出するためにPostmanのようなツール(私は大いにお勧めします)を使用する方が簡単です。それはあなたのためにいくつかの変数を必要とするので、テストの設定ではなく、開発しようとしているもの(REST API?)に集中することができます。

+0

リクエストマッピングを「POST」メソッドに変更しました。フォームアクションは '' save''または '' request/save''ですか? – santafebound

+1

あなたのHTMLが提供されているURLによって異なります。あなたは "/ request/save"(スラッシュ接頭辞に注意してください)を使うことができ、それはあなたのルートに相対的です。私はそれがあなたのためにうまくいくと思う。代わりに、あなたのHTMLが/からリクエストされている場合は、 "save"の相対アクションを使用することができます –

+0

デフォルトのメソッドは 'GET'ではありません。 '@ RequestMapping'の' method'パラメータにはデフォルト値がありません。つまり、メソッドの型を絞り込まなければ、すべてのタイプの要求を処理します。 – sedooe

関連する問題