2016-03-31 24 views
0

Spring kontrol eşleme şu var 400 kötü isteği ve uygulama/x-www-form-urlencod v/s uygulama/json:Yay kontrol

@RequestMapping(value="/isSomethingHappening", method = RequestMethod.POST) 
public @ResponseBody JsonResponse isSomethingHappening(HttpServletRequest httpRequest,@RequestParam("employeeId") String employeeId, 
     ModelMap model) throws IOException{ 

Olarak aşağıdaki Bu çağırmak sonra 400 yanıt almak.

var requestData = {"employeeId":XYZ.application.employeeId}; 

      XYZ.network.fireAjaxRequestAsync("application/json", "forms/testing/isSomethingHappening", requestData, function(response, status, xhr){ 

Ancak bunu aşağıda olduğu gibi çağırırsam, başarı yanıtı alırım.

var requestData = {"employeeId":XYZ.application.employeeId}; 

      XYZ.network.fireAjaxRequestAsync("application/x-www-form-urlencoded", "forms/testing/isSomethingHappening", requestData, function(response, status, xhr){ 

ben düzeltme anladım ama benim isteği veri var requestData = {"employeeId":XYZ.application.employeeId}; değişmedi ve ben sadece içerik türünü değiştirdi nesne zaman İlki bana hata verdi anlamak mümkün değilim. Benim için application/json daha uygun bir içerik türü görünüyor çünkü istek verilerim bir JSON nesnesi. Benim denetleyicisi haritalama olarak altında olduğu


Ayrıca, diğer örneklerini vardır:

@RequestMapping(value = "/getOnFlyResults", method = RequestMethod.POST) 
    public @ResponseBody JsonResponse getOnFlyResults(HttpServletRequest httpRequest, 
      @RequestBody testingRequestVO testingRequestVO, ModelMap modelMap) throws IOException{ 

Ve bu çağırma için ben aşağıdaki gibi isteği göndermek:

var requestData = {"employeeId":XYZ.application.employeeId, 
         "fName":XYZ.application.fName, 
         "lName": XYZ.application.lName, 
         "telephoneNumber":telephoneNumber, 
         "testMode":XYZ.constant.onFly}; 

      XYZ.network.fireAjaxRequestAsync("application/json", "forms/testing/startTest", JSON.stringify(requestData), function(response, status, xhr){ 

Bilmiyorum Bunu neden yapmazsam, JSON.stringify(requestData)'u kullanarak verileri dizmek zorunda olduğumu anlıyorum. Bunu yapmazsam 400 alırım.

Bir kez dize sonra bir dize olur o zaman benim içerik türü text/plain olmalı ama application/json

ile uyumludur. Lütfen kod düzeltmelerini biliyorum, ancak kavramı anlamak istiyorum. this'u okudum ve bu kavramın ayrıntılarını ve sahip olduğum sorguları açıklamıyor.

+0

Uygulamanız için bağımlı olarak yapılandırılmış jackson kitaplığına sahip misiniz? – pczeus

+0

@pczeus Nops ... – hagrawal

+0

Maven Kullanımı? Gradle? – pczeus

cevap

1

JSON'u işlemek için Spring uygulamanızda Jackson kitaplığını kullanmak yaygındır. Ant kullanıyorsanız, kütüphanelerinize Jackson eklemeyi deneyin.

Jackson kütüphanesini doğrudan Maven Central'dan indirebilirsiniz. İşte bir örnek Maven bağımlılık bloktur (ama son sürümü almak): With veya bu may Jackson olmadan

<annotation-driven /> 

:

<dependency> 
    <groupId>org.codehaus.jackson</groupId> 
    <artifactId>jackson-mapper-asl</artifactId> 
    <version>1.9.13</version> 
</dependency> 

Eğer Bahar yapılandırmasında açıklama güdümlü etiketine sahip olduğundan emin olun Ayrıca kontrolör son noktasının JSON ürettiğini veya tükettiğini belirtmeye yardımcı olur;

@RequestMapping(value="/getjson", 
    produces=MediaType.APPLICATION_JSON_VALUE, consumes=MediaType.APPLICATION_JSON_VALUE) 
public @ResponseBody MyObject getJSON(){ 
    return new MyObject(); 
} 
+0

Cevabınız için teşekkürler dostum. Bütün bunlarla ilgili tüm sorunları çözdüğümü söyledim, daha çok kavramlarla ilgileniyorum. – hagrawal

+0

Eğer kavramlarla ilgileniyorsanız, Spring Boot'da bir göz atmanızı tavsiye ederim. Başlangıç ​​sayfasına bakarsanız, bir REST web servisiyle kalkmanın ve çalıştırmanın ne kadar kolay olduğunu görürsünüz: http://projects.spring.io/spring-boot/ – pczeus

+0

İlkbaharda işlerin nasıl yapılacağını açıklar. aradığım kavramları açıklayamazdı. – hagrawal