Eclipse JAXRS POST 请求负载未转换为请求模型对象
Eclipse JAXRS POST Request payload not converted into request model object
我有一个 JSON 有效负载作为 POST 请求正文的一部分发送,例如:
{
"id": "xyz3",
"model": "Camry",
"year": 2010
}
而且我希望此有效负载转换为我的 java class CarRequest 的实例,定义如下:
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
...
@XmlRootElement(name = "carRequest")
@XmlAccessorType(XmlAccessType.FIELD)
public class CarRequest {
private String id;
private String model;
private int year;
public CarRequest() {
}
public String getId() {
return id;
}
public String getModel() {
return model;
}
public int getYear() {
return year;
}
@Override
public String toString() {
return ToStringBuilder.reflectionToString(this, ToStringStyle.JSON_STYLE);
}
}
但是,在我的 POST 端点资源方法中,我没有看到这种情况发生。我的资源定义为:
@POST
@Path("cars")
@Produces({ "application/json", "application/xml" })
public Response carsInfos(@Valid CarRequest carRequest) {
System.out.println(carRequest); //prints { "id": "null", "model": "null", "year": 0 }
return Response.ok().build();
}
上面打印carRequest的那一行打印出来的样子
{ "id": "null", "model": "null", "year": 0 }
,而不是喜欢
{ "id": "xyz3", "model": "Camry", "year": 2010 }
我只使用过 Jackson 注释来指定映射,但我认为这里真正的问题可能是缺少“@Consumes”注释。因此,我相信它不知道如何解析您的请求正文。
我尝试了@Consumes 注释(感谢@David M. Karr),但没有解决任何问题。事实证明,我的服务器使用的是具有 JAXRS 2.1 功能的 JavaEE 8。
在为 JavaEE7 和 JAXRS 2.0 添加功能后,请求模型开始填充值。
我有一个 JSON 有效负载作为 POST 请求正文的一部分发送,例如:
{
"id": "xyz3",
"model": "Camry",
"year": 2010
}
而且我希望此有效负载转换为我的 java class CarRequest 的实例,定义如下:
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
...
@XmlRootElement(name = "carRequest")
@XmlAccessorType(XmlAccessType.FIELD)
public class CarRequest {
private String id;
private String model;
private int year;
public CarRequest() {
}
public String getId() {
return id;
}
public String getModel() {
return model;
}
public int getYear() {
return year;
}
@Override
public String toString() {
return ToStringBuilder.reflectionToString(this, ToStringStyle.JSON_STYLE);
}
}
但是,在我的 POST 端点资源方法中,我没有看到这种情况发生。我的资源定义为:
@POST
@Path("cars")
@Produces({ "application/json", "application/xml" })
public Response carsInfos(@Valid CarRequest carRequest) {
System.out.println(carRequest); //prints { "id": "null", "model": "null", "year": 0 }
return Response.ok().build();
}
上面打印carRequest的那一行打印出来的样子
{ "id": "null", "model": "null", "year": 0 }
,而不是喜欢
{ "id": "xyz3", "model": "Camry", "year": 2010 }
我只使用过 Jackson 注释来指定映射,但我认为这里真正的问题可能是缺少“@Consumes”注释。因此,我相信它不知道如何解析您的请求正文。
我尝试了@Consumes 注释(感谢@David M. Karr),但没有解决任何问题。事实证明,我的服务器使用的是具有 JAXRS 2.1 功能的 JavaEE 8。 在为 JavaEE7 和 JAXRS 2.0 添加功能后,请求模型开始填充值。