发送 post 请求时,客户端发送的请求在语法上不正确
Posted
技术标签:
【中文标题】发送 post 请求时,客户端发送的请求在语法上不正确【英文标题】:the request sent by the client was syntactically incorrect when sending post requests 【发布时间】:2014-02-26 18:28:33 【问题描述】:myController 中的方法是这样的
@RequestMapping(value="/processId/dependents", method=RequestMethod.POST,consumes="application/json")
@ResponseBody
public Dependents postdependent(@ModelAttribute ProcessContext process,@RequestBody Dependent dependent)
return process.getDependents().addDependent(dependent);
我的获取和删除工作完美。 但是每当我发帖时,我都会收到客户端发送的请求在语法上是不正确的。 用于发布请求的 JSON:
"
'dependentId' : '1003',
'firstName' : 'Vishu',
'lastName' : 'poodari',
'birthDate' : '1970/04/15'
"
请我使用单引号尝试所有组合,双引号所有内容。
我正在使用 rest-shell 进行操作。
请找到我的依赖类
public class Dependent
private String dependentId;
private String firstName;
private String lastName;
private String birthDate;
@JsonCreator
public Dependent(@JsonProperty("dependentId") String dependentId, @JsonProperty("firstName") String firstName, @JsonProperty("lastName")String lastName,
@JsonProperty("birthDate") String birthDate)
this.dependentId = dependentId;
this.firstName = firstName;
this.lastName = lastName;
this.birthDate = birthDate;
public String getDependentId()
return dependentId;
public void setDependentId(String dependentId)
this.dependentId = dependentId;
public String getFirstName()
return firstName;
public void setFirstName(String firstName)
this.firstName = firstName;
public String getLastName()
return lastName;
public void setLastName(String lastName)
this.lastName = lastName;
public String getBirthDate()
return birthDate;
public void setBirthDate(String birthDate)
this.birthDate = birthDate;
【问题讨论】:
向我们展示您的Dependent
课程。另外,将您的日志级别转为调试并检查日志。
已添加依赖类。
您是否发送查询字符串以便 Spring 可以生成 @ModelAttribute
?您希望它从哪里生成?
我正在发送 JSON 格式的 POST 请求
【参考方案1】:
语法不正确表示json有问题,请将单引号替换为双引号。
"dependentId" : "1003",
"firstName" : "Vishu",
"lastName" : "poodari",
"birthDate" : "1970/04/15"
还要检查 json 键是否应与您的 Dependent 类属性名称匹配,并且数据应可由解析器转换。
【讨论】:
感谢您的回复。我更正了我的 json,当我将日志级别更改为调试时,它显示我缺少空构造函数。现在可以了,谢谢大家。 “我将日志级别更改为调试,它显示我缺少空构造函数”你能告诉我这些日志是如何添加到应用程序中的吗? 发生此错误是因为类中缺少默认构造函数添加默认构造函数,一切都会正常工作 public Dependent() 【参考方案2】:错误 *客户端发送的请求在语法上不正确"** 在大多数情况下意味着杰克逊无法脱盐(将json字符串转换为对象),因为缺少默认构造函数。
在您的情况下,缺少默认构造函数,您有参数化构造函数,它覆盖默认值并且杰克逊无法创建对象
public Dependent(@JsonProperty("dependentId") String dependentId, @JsonProperty("firstName") String firstName, @JsonProperty("lastName")String lastName,
@JsonProperty("birthDate") String birthDate) this.dependentId = dependentId;
this.firstName = firstName;
this.lastName = lastName;
this.birthDate = birthDate;
将默认构造函数添加到你的类中,一切都会正常工作
public Dependent()
【讨论】:
【参考方案3】:在使用 curl(在 dos 上)时,我遇到了同样的问题。我需要使用所有双引号,因此掩盖了正文部分中的双引号: C:>curl -H "Content-Type: application/json" -X POST -d "\"id\":1,\"firstName\":\"Hans\",\"lastName\":\"集合\"" http://localhost:8081/persons
【讨论】:
以上是关于发送 post 请求时,客户端发送的请求在语法上不正确的主要内容,如果未能解决你的问题,请参考以下文章
Android 错误:MultipartEntity,客户端发送的请求在语法上不正确
从 vuejs 客户端向 oauth/token 发送 POST 请求时的 401 响应