一般的に、POSTする際、サーバへのデータ送信はリクエストボディを使用します。しかし、たまにPOSTなのに、URLの後ろにパラメータをついていることがあります。あれ?!と思うかもしれないが、確かに問題なく動きます。
POSTのリクエストボディと、URLの後ろに同じ名前のパラメータがあるとき、@RequestParamを使用してパラメータを受け取るには注意しないといけないです。
画面側:html
……
<form id="testForm" th:action="@{/test}" th:object="${testForm}" method="post">
<input type="hidden" name="paramA" th:value="postRequestBody">
……
<button type="button" id="testBtn" >POST処理</button>
</form>
……
画面側:javascript
$(function() {
// 「POST処理」ボタン押下時処理
$(document).on("click", "button[id='testBtn']", function() {
var form = $('#testForm');
let actionPath = form.attr('action')
form.attr('action' , actionPath + '?paramA=urlParam');
$('#lapssLinkForm').submit();
return false;
});
}
サーバ側:java
……
@RequestMapping(value = "test")
public ModelAndView testPost(@RequestParam String paramA) {
……
}
上記を実行して、「POST処理」ボタンを押すと、「…/test?paramA=urlParam」にアクセスするになりますが、ここで受け取ったparamAの中身を確認すると、「”urlParam,postRequestBody“」となります。つまり、POSTのリクエストボディにあるparamAの値とURLの後ろについているparamAの値両方が入っています。
URLの後ろについているparamAの値だけ「”urlParam”」が入ると思いましたが、ここまで理解するまで色々調査して、苦労しました。
コメント