我有一个在 XML 发布请求方面运行良好的 api。XML 在 Post 正文中接收并进行相应处理。这是方法的标题
@POST
@Path ("{"+num+"}/"+STATUS+"."+XML)
@Consumes (MediaType.APPLICATION_XML)
@Produces (MediaType.APPLICATION_XML)
public Response getStatusXML (@PathParam(num) String num,
JAXBElement<OrderStatusRequestType> jaxbOrderStatusRequestType,
@Context UriInfo requestUriInfo,
@Context SecurityContext securityContext){
OrderStatusRequestType orderStatusRequestType = jaxbOrderStatusRequestType.getValue();
return processRequest (num, XML, orderStatusRequestType, securityContext);
}
使用此 POST 正文调用此 WS
<orderStatusRequest>
<vendor>32658</vendor>
<key>232X1</key>
</orderStatusRequest>
我有 XML 模式,这个请求按要求工作正常。我得到了 jaxbObject,也得到了 orderStatusRequest。但是,当我尝试调用我的 json webservice 时,我得到了 null orderStatusRequest
。我有一个单独的方法来使用 json。
@POST
@Path ("{"+num+"}/"+STATUS+"."+JSON)
@Consumes (MediaType.APPLICATION_JSON)
@Produces (MediaType.APPLICATION_JSON)
public Response getStatusJSON(@PathParam(num) String num,
JAXBElement<OrderStatusRequestType> jaxbOrderStatusRequestType,
@Context UriInfo requestUriInfo,
@Context SecurityContext securityContext){
OrderStatusRequestType orderStatusRequestType= jaxbOrderStatusRequestType.getValue();
return processRequest (num, JSON, orderStatusRequestType, securityContext);
}
我在 post 请求中发送以下 json
{"orderStatusRequest":{"vendor":"32658","key":"232X1"}}
我在我的 jaxbElement 中得到空对象。我无法理解为什么。为方便起见,这是我的 XML Schema
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:complexType name="orderStatusRequestType">
<xs:sequence>
<xs:element name="vendor" type="xs:string" minOccurs="1" maxOccurs="1"/>
<xs:element name="key" type="xs:string" minOccurs="1" maxOccurs="1"/>
</xs:sequence>
</xs:complexType>
<xs:element name="orderStatusRequest" type="orderStatusRequestType"/>
</xs:schema>
我写了一个客户端并发送 JSON 请求
ClientResponse clientResponse = service.path("api")
.path("v1")
.path("personal")
.path("orders")
.path(num)
.path("status.json").accept(MediaType.APPLICATION_JSON).post(ClientResponse.class, jaxbOst);
它给了我错误状态 415,即不支持内容类型。但是,只有 2 处修改即status.xml
可以MediaType.APPLICATION_XML
正常工作。
更新 2:使用 Fiddler,我可以使用 JSON 访问 Web 服务。但是泽西岛并没有将输入的 POST 正文行进到特定的对象中。我在vendor
和key
字段中得到空值。
更新 3
我可以使用 Fiddler 的 JSON。JSON 是{"vendor":"32658","key":"232X1"}
. 我之前将它包裹在另一个对象下。但我仍然无法使用 Jersey Client 发送请求。我猜是XML
当我尝试发布时我的 JAXB 对象正在给出。我如何确保当我使用它时objectFactory.createOderRequestStatus
,它会被翻译成 JSON 而不是 XML?