【发布时间】:2016-02-02 20:15:57
【问题描述】:
我继承了一个包含许多 Web 服务的大型项目。似乎它们是用 Jersey Jax-WS 创建的。我的任务是让其中一个接受 JSON 作为 POST 请求。我不知道为什么没有收到参数。
我正在使用 SoapUI 发送请求 RESTful 请求。我创建了一个 REST 项目并设置了所需的 Endpoint 和 Resource 值。媒体类型下拉字段设置为 application/json。这是我放置在 Media Type 字段下方的 textarea 中的 JSON 字符串:
{"corp":" 877310","rateCodes":["N6","3Z"],"headend_designator":" 238005"," eqp_protocol_aiu":"M3","eqp_typ_aiu":"JD"}
现在在我的名为 BsgHandleResource 的 java 文件中
@WebService
@Singleton
@Path("/bsghandle")
public class BsgHandleResource {
再往下我有这个方法:
@POST
@Path("/getBsgHandles")
@Consumes(MediaType.APPLICATION_JSON)
@Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
public BsgHandleResponse getBsgHandlesJson(
@PathParam("appkey") String appkey,
@PathParam("rateCodes") final List<String> rateCodes,
@PathParam("corp") String corp,
@PathParam("headend_designator") String headend_designator,
@PathParam("eqp_protocol_aiu") String eqp_protocol_aiu,
@PathParam("eqp_typ_aiu") String eqp_typ_aiu,
@PathParam("forceUpdate") boolean forceUpdate) {
HttpServletRequest request = getRequestObject();
logger.debug("getBsgHandlesJson() called for rateCodes="
+ rateCodes.toString() + " from ip" + request.getRemoteAddr());
return processGetBsgHandleByRateCode(appkey, rateCodes, corp,
headend_designator, eqp_protocol_aiu, eqp_typ_aiu,
forceUpdate, request);
}
当我从 SoapUI 发送请求时,我在日志文件中看到的输出是:
getBsgHandlesJson() called for rateCodes=[]...
我的 pom.xml 文件包含这些依赖项:
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-server</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-bundle</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-json</artifactId>
<version>1.8</version>
</dependency>
有人可以建议我缺少什么吗?
编辑:关于 user2004685 的建议,我的代码现在如下所示:
@POST
@Path("/getBsgHandles")
@Consumes(MediaType.APPLICATION_JSON)
@Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
public BsgHandleResponse getBsgHandlesJson(BsgHandleRequest obj) {
HttpServletRequest request = getRequestObject();
logger.debug("getBsgHandlesJson() called for rateCodes="
+ obj.getRateCodes().toString() + " from ip" + request.getRemoteAddr());
return processGetBsgHandleByRateCode(obj.getAppkey(), obj.getRateCodes(), obj.getCorp(),
obj.getHeadendDesignator(), obj.getEqpProtocolAiu(), obj.getEqpTypAiu(),
obj.getForceUpdate(), request);
}
但现在我什至没有得到任何记录器输出。我在 soapui 响应中确实收到以下错误:
<data contentType="text/plain" contentLength="343"><![CDATA[Unrecognized field "headend_designator" (Class com.our.company.oss.vcwh.queryservice.billing.BsgHandleRequest), not marked as ignorable
at [Source: org.apache.catalina.connector.CoyoteInputStream@6bb342eb; line: 1, column: 65] (through reference chain: com.our.company.oss.vcwh.queryservice.billing.BsgHandleRequest["headend_designator"])]]></data>
这是 BsgHandleRequest.java 中的字段:
@XmlRootElement(name = "bsgHandleRequest")
@XmlAccessorOrder(XmlAccessOrder.ALPHABETICAL)
public class BsgHandleRequest {
private static final long serialVersionUID = 1L;
private List<String> rateCodes;
private String corp;
private String headend_designator;
private String eqp_protocol_aiu;
private String eqp_typ_aiu;
private String appkey;
private boolean forceUpdate;
这里是 headend_designator 的 getter 和 setter。我没有发现任何错误或与其他任何不同之处。
public String getHeadendDesignator() {
return headend_designator;
}
public void setHeadendDesignator(String headend_designator) {
this.headend_designator = headend_designator;
}
【问题讨论】:
标签: java json maven jersey jax-ws