【发布时间】:2012-03-12 00:21:35
【问题描述】:
我正在 Glassfish 上的 Jersey 的帮助下构建一个 REST Web 服务。现在我正在为我的 searchQuerys 的自定义输入源而苦苦挣扎。
如果有搜索方法:
@POST
@Path("search")
@Consumes({"application/xml", "application/json"})
@Produces({"application/xml", "application/json"})
public List<Index> search(SearchQuery searchqry) {
...
}
还有类 SearchQuery:
@XmlRootElement
public class SearchQuery implements Serializable {
private static final long serialVersionUID = 1L;
public SearchQuery() {
}
public SearchQuery(float lat, float lng) {
this.lat = lat;
this.lng = lng;
}
public float getLat() {
return lat;
}
public void setLat(float lat) {
this.lat = lat;
}
public float getLng() {
return lng;
}
public void setLng(float lng) {
this.lng = lng;
}
private float lat;
private float lng;
}
我的电话:
curl -v -X POST --data-binary "<SearchQuery><lat>3.3</lat><lng>5.4</lng></SearchQuery>" -H "Content-Type: application/xml" -H "Accept: application/xml" http://localhost:8080/WebApplication1/resources/index/search
我尝试使用 restconsole 发送 XML 请求,但我得到了同样的错误:
HTTP 状态 400 - 错误请求
类型状态 报告
消息错误请求
描述 客户端发送的请求在语法上不正确(错误 请求)。
GlassFish 服务器开源版 3.1.2
* 关闭连接#0
我基本上遗漏了一些东西,或者有人可以提示我如何调试应用程序服务器中的解组部分吗?
我按照http://xebee.xebia.in/2011/12/30/example-of-restful-webservice-with-xml-and-json-using-maven-jaxb-jersey-tomcat-and-curl/ 的指南进行操作 并测试了注释的各种组合但没有成功:(
【问题讨论】:
-
您正在返回一个索引对象列表。这个类(索引)是否可序列化,并用@XMLRootElement 标记?
-
@BWitched jep,我还测试了以 void 作为返回值的方法,仍然不起作用:(
-
也许您已经尝试过了,但是您是否捕获了发送的 http 包(或者更好的是,到达服务器的那个)?只是为了确保它是 100% 正确的。另一个想法,我在 Jersey 遇到了一些问题,在路径的开头添加一个“/”得到了解决:@Path("/search")
-
看来您需要为服务器提供正确的内容类型:
curl ... -H "Content-Type: application/xml"。 -
@dma_k 我已经在最后的 curl 语句中发送了 ContentType,+Bwitched 使用 /search 对其进行了测试,仍然没有,我将继续使用 whireshark 进行测试,看看发布到服务器的内容。
标签: rest glassfish xml-parsing jersey