2016-12-01 2 views
0

私はajax経由で送信する春のフォームを持っています。ここに私のフォームはSpringフォームデータをjsonオブジェクトに自動的に解析する方法は? (Spring、jQuery、AJAX、JSON)

@RequestMapping(value="/addToCart", method = RequestMethod.POST) 
public CartProduct addToCart(@RequestBody CartProduct cartProduct, HttpServletRequest request){ 

    System.out.println(cartProduct.getProduct().getProductId()); 
    return null; 
} 

は、しかし...

$(document).ready(function() { 

var form = $("form"); 
var url = form.attr("action"); 
var formMethod = form.attr("method"); 

form.submit(function(event) { 

    event.preventDefault(); 

    var thisForm = this; 

    $.ajax({ 

     url : url, 
     data : $(this).serialize(), 
     type : "POST", 
     headers: { 
      'Content-Type': 'application/json' 
     }, 
     success : function(cartProduct) { 
      $(thisForm).find('.success-message-container').remove(); 
      $(thisForm).find('.success-message').show(); 
      $(thisForm).find('#addToCart').hide(); 
      $(thisForm).find('#viewCart').toggle(); 
     } 
    }); 
}); 

}); 
}); 

そして、ここでは、受信した残りのコントローラである... ...

<form:form action="addToCart" method="POST" 
       modelAttribute="cartProduct"> 
       <form:input type="hidden" path="product.productId" 
        value="${inventory.getProduct().getProductId()}" /> 
       <div class="card-block" style="overflow: hidden; padding: 2%"> 
        <h5 style="white-space: nowrap"> 
         <a href="#" class="text-primary card-title">${inventory.getProduct().getName()}</a> 
        </h5> 
        <p class="card-text text-danger">&#8369; 
         ${inventory.getProduct().getPrice()}</p> 
        <p> 
        <div class="success-message-container"> 
         <span class="text-success add-to-cart"><strong>&nbsp;</strong></span> 
        </div> 
        <div class="success-message vertical-center" 
         style="display: none;"> 
         <span class="text-success add-to-cart"><strong>Added 
           to cart!</strong></span> 
        </div> 
        <form:button id="addToCart" class="btn btn-block btn-warning">Add to cart</form:button> 
        <a id="viewCart" href="viewCart" class="btn btn-block btn-warning" style="display: none;">View cart</a> 
       </div> 
</form:form> 

そして、それはAjaxコードを経由して提出しますですこのエラーが発生し続ける...

POST http://localhost:8080/tommystore/customer/addToCart 400 (Bad Request) 

自動オブジェクトマッピングのためにJacksonをインポートしましたが、まだ動作しません。

<dependency> 
     <groupId>com.fasterxml.jackson.core</groupId> 
     <artifactId>jackson-core</artifactId> 
     <version>2.6.3</version> 
    </dependency> 

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

これを修正するにはどうすればよいですか?

+0

あなたはansに従うことができますか? http://stackoverflow.com/questions/36564619/how-to-get-form-field-value-and-send-to-server-as-json-using-ajax-jquery/36565138#36565138 –

+0

これは機能しません。 :(送信されたデータは "product.productId = PROD-593842195735187" – saluyotamazing

+0

オブジェクト表記ではありません:( – saluyotamazing

答えて

0

Springはリクエストボディをメソッド引数に変換するためにHttpMessageConverterを使用します。 2つの形式(jsonまたはxml、私はjsonを好む)があります。HttpMessageConverterは、HTTP要求メッセージからオブジェクトへの変換と、オブジェクトからHTTP応答本体への変換を行います。 HttpMessageConverterあなたは、サーバーに登録し、あなたのXMLコンテキストで

@Configuration 
@ComponentScan({ "yourpackage" }) 
public class WebConfig extends WebMvcConfigurerAdapter 
{ 
@Override 
public void configureMessageConverters(
    List<HttpMessageConverter<?>> converters) { 

    messageConverters.add(createXmlHttpMessageConverter()); 
    messageConverters.add(new MappingJackson2HttpMessageConverter()); 

    super.configureMessageConverters(converters); 
} 
private HttpMessageConverter<Object> createXmlHttpMessageConverter() { 
    MarshallingHttpMessageConverter xmlConverter = 
     new MarshallingHttpMessageConverter(); 

    XStreamMarshaller xstreamMarshaller = new XStreamMarshaller(); 
    xmlConverter.setMarshaller(xstreamMarshaller); 
    xmlConverter.setUnmarshaller(xstreamMarshaller); 

    return xmlConverter; 
} 
} 

をobjectにあなたのXMLデータを変換するためのconfig XML ConverterをdataType: 'xml'たり、AJAXを追加し、XML

へのデータのフォーマットを変更する必要があります 使用あなたのコンバーター

関連する問題