2016-12-08 2 views
1

Мой POST-вызов этого API дает мне 400. Это дает синтаксическую ошибку, даже если сериализованный объект DTO верен. Объект запроса использует правильные имена полей, которые соответствуют именам полей в классе.Http Bad Request - запрос, отправленный клиентом, был синтаксически неправильным

Также Api даже не попадает.

В заголовках, типа содержимого: приложения/JSON

Мой API является:

@RequestMapping(value = "/surveymonkey/webhook/receiver", method = RequestMethod.POST) 
    @ResponseBody 
    public void respondToSurveyMonkeyPOSTCall(@RequestBody NPSWebhookRequestBody npsWebhookRequestBody, HttpServletRequest request) { 


     String objectType = null; 

     String objectId =null; 

     if(npsWebhookRequestBody!=null){ 

      objectType = npsWebhookRequestBody.getObjectType(); 

      objectId = npsWebhookRequestBody.getObjectId(); 
     } 

     service.getCall(objectType,objectid 
    } 

Мой DTO класс, который сериализуется requestbody является:

package com.lk.scheduler.beans; 

import com.google.gson.annotations.SerializedName; 

public class NPSWebhookRequestBody { 

    @SerializedName("name") 
    String name; 

    @SerializedName("event_id") 
    String eventId; 

    @SerializedName("object_type") 
    String objectType; 

    @SerializedName("object_id") 
    String objectId; 

    @SerializedName("event_type") 
    String eventType; 

    @SerializedName("event_datetime") 
    String eventDatetime; 

    /** 
    * @return the name 
    */ 
    public String getName() { 
     return name; 
    } 

    /** 
    * @param name the name to set 
    */ 
    public void setName(String name) { 
     this.name = name; 
    } 

    /** 
    * @return the eventId 
    */ 
    public String getEventId() { 
     return eventId; 
    } 

    /** 
    * @param eventId the eventId to set 
    */ 
    public void setEventId(String eventId) { 
     this.eventId = eventId; 
    } 

    /** 
    * @return the objectType 
    */ 
    public String getObjectType() { 
     return objectType; 
    } 

    /** 
    * @param objectType the objectType to set 
    */ 
    public void setObjectType(String objectType) { 
     this.objectType = objectType; 
    } 

    /** 
    * @return the objectId 
    */ 
    public String getObjectId() { 
     return objectId; 
    } 

    /** 
    * @param objectId the objectId to set 
    */ 
    public void setObjectId(String objectId) { 
     this.objectId = objectId; 
    } 

    /** 
    * @return the eventType 
    */ 
    public String getEventType() { 
     return eventType; 
    } 

    /** 
    * @param eventType the eventType to set 
    */ 
    public void setEventType(String eventType) { 
     this.eventType = eventType; 
    } 

    /** 
    * @return the eventDatetime 
    */ 
    public String getEventDatetime() { 
     return eventDatetime; 
    } 

    /** 
    * @param eventDatetime the eventDatetime to set 
    */ 
    public void setEventDatetime(String eventDatetime) { 
     this.eventDatetime = eventDatetime; 
    } 



} 

Почтальон вызов, который давая 400:

enter image description here

P.S. : HttpGET и HttpHEAD работают с этим API.

+0

Каковы файлы журналов вашего приложения? –

+0

Вы пытались отправить его как данные формы? –

ответ

2

Это была просто удача, что я нашел ошибку. Очевидно, что примечание Spring's @RequestBody не работает для сериализации-десериализации с использованием gson-библиотеки Google.

@SerializedName (который Gson-х аннотация собственность) не будет работать во время десериализации и, таким образом, 400 плохо запроса в теле запроса не может быть решен ..

Мы можем использовать @JsonProperty из fasterxml-Джексоне. Он отлично работает, и API дает 200 ответов.

Смежные вопросы