我对这个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的邮差:
P.S。 :HttpGET和HttpHEAD调用此API正在运行。
答案 0 :(得分:2)
幸运的是,我发现了错误。显然,Spring的 @RequestBody 注释不适用于使用Google的gson库进行序列化 - 反序列化。
@SerializedName(这是Gson的注释属性)在反序列化时不起作用,因此无法解析400请求正文的错误请求。
我们可以使用fastxml-jackson的@JsonProperty。它工作正常,API提供200响应。