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;
}
}
答案 0 :(得分:12)
语法错误意味着json有问题,请用double替换单引号。
{"dependentId" : "1003",
"firstName" : "Vishu",
"lastName" : "poodari",
"birthDate" : "1970/04/15"
}
还要检查json键是否应与Dependent类属性名称匹配,并且数据应该可由解析器转换。
答案 1 :(得分:5)
错误*客户端发送的请求在语法上是不正确的“**在大多数情况下意味着jackson无法脱盐(将json字符串转换为对象),因为缺少默认构造函数。
在你的情况下,缺少默认构造函数,你有参数化构造函数,它覆盖默认值,而jackson不能创建对象
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() {
}
答案 2 :(得分:0)
当使用curl(在dos上)时,我遇到了同样的问题。我需要使用所有双引号,因此屏蔽身体部分内的引号: C:> curl -H“Content-Type:application / json”-X POST -d“{\”id \“:1,\”firstName \“:\”Hans \“,\”lastName \“:\ “Muster \”}“http://localhost:8081/persons