Http Bad Request - 客户端发送的请求在语法上不正确

时间:2016-12-08 11:05:23

标签: java spring api post httprequest

我对这个API的POST调用给了我400.即使序列化的DTO对象是正确的,它也会出现语法错误。请求者正在使用与类中的字段名相对应的正确字段名。

此外,ApI甚至没有被击中。

在标题中,content-type:application / 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类是:

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正在运行。

1 个答案:

答案 0 :(得分:2)

幸运的是,我发现了错误。显然,Spring的 @RequestBody 注释不适用于使用Google的gson库进行序列化 - 反序列化。

@SerializedName(这是Gson的注释属性)在反序列化时不起作用,因此无法解析400请求正文的错误请求。

我们可以使用fastxml-jackson的@JsonProperty。它工作正常,API提供200响应。