Eclipse JAXRS POST请求有效负载未转换为请求模型对象

时间:2020-10-26 18:04:38

标签: java eclipse http-post jax-rs

我有一个JSON负载作为POST请求正文的一部分发送,例如:

{
    "id": "xyz3",
    "model": "Camry",
    "year": 2010
}

我希望将此有效载荷转换为如下定义的Java类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 }

2 个答案:

答案 0 :(得分:1)

我只用杰克逊(Jackson)注释指定映射,但是我认为真正的问题可能是缺少“ @Consumes”注释。因此,我认为它不知道如何解析您的请求正文。

答案 1 :(得分:0)

我尝试了@Consumes注释(感谢@David M. Karr),但是并没有解决任何问题。事实证明,我的服务器正在使用具有JAXRS 2.1功能的JavaEE 8。 在为JavaEE7和JAXRS 2.0添加功能之后,请求模型开始填充这些值。