2017-06-24 16 views
0

サーバーにajax POST要求を送信し、応答を取得しようとしています。 私の問題は、私がフォームを送信すると、私の@RequestBody paramが空であることです。 私はこのチュートリアルに続き、その人と同じことをしました。 http://www.mkyong.com/spring-mvc/spring-4-mvc-ajax-hello-world-example/ajax POSTメソッド呼び出し後に@RequestBody属性が空です

コードの関連部分: コントローラ:のpom.xmlに

@JsonView(Views.Public.class) 
    @RequestMapping(value = "searchEvents", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE) 
    @ResponseBody 
    public ModelAndView findEvents(HttpServletRequest request, HttpServletResponse response, @RequestBody EventFilterBean eventFilterBean) { 
     /// 
    } 

index.jspを

var search = {} 
     search["eventName"] = $("#eventName").val(); 

     $.ajax({ 
      type : "POST", 
      contentType : "application/json", 
      url : "searchEvents", 
      data : JSON.stringify(search), 
      dataType : 'json', 
      timeout : 100000 
     }); 

Iは

  <dependency> 
       <groupId>com.fasterxml.jackson.core</groupId> 
       <artifactId>jackson-core</artifactId> 
       <version>2.9.0.pr3</version> 
      </dependency> 
      <dependency> 
       <groupId>com.fasterxml.jackson.core</groupId> 
       <artifactId>jackson-databind</artifactId> 
       <version>2.9.0.pr3</version> 
      </dependency> 

を追加私は解決策を見つけることを試みました私はできませんでした。事前に助けていただきありがとうございます。

答えて

0

;。私に欲しいStringを与えない。 search ["eventName"] = $( "#eventName")を変更したときval();検索する["eventName"] = "一部のハードコードされた文字列";できます。 @JsonView(Views.Public.class)がなくても動作します

0

によると:

var search = {} 
    search["eventName"] = $("#eventName").val(); 

    $.ajax({ 
     type : "POST", 
     contentType : "application/json", 
     url : "searchEvents", 
     data : JSON.stringify(search), 
     dataType : 'json', 
     timeout : 100000 
    }); 

あなたは、文字列の形式でJSONを送っているので、最初に行うべきことは、Stringパラメータに@RequestBody注釈を入れることです。

第2に、ルート値に/を追加します。

第3に、Ajaxを使用している場合は、ModelAndViewを返すことができません。応答を内部に含むHTTPメッセージを返す必要があります。このよう

:私は$( "#のeventNameの")のval()シオマネキをインストールし、conluded

@RequestMapping(value = "/searchEvents", method = RequestMethod.POST, consumes = "application/json", produces="application/json") 
    @ResponseBody 
    public ResponseEntity<String> findEvents(HttpServletRequest request, HttpServletResponse response, @RequestBody String eventFilterBean) { 
     /// 
    } 
+0

こんにちは、ありがとうございました。私は戻り値に同意しますが、それは今私の問題ではありません。チュートリアルでは、自分のカスタムクラスをparamとして渡すことができます。チュートリアルで理解しているように、クラスパスにjacksonを含める必要があります。ジャクソンは解決し、jsonのeventNameフィールドに一致する必要があります。カスタムクラスのmy eventName文字列に追加します。 – Spasoje

関連する問題