我有一个资源:
@GET
@Path("/{v1}")
@Produces(Array(MediaType.APPLICATION_XML))
def asyncGet(@Suspended asyncResponse: AsyncResponse, @PathParam("v1") v1: Int): Unit = {...}
在它的主体中它以Result对象(asyncResponse.resume(resultObject)
)异步响应,该对象被声明为
@XmlRootElement
case class Result(res: Double)
在我的pom中,我有下一个依赖项:
javax.ws.rs:javax.ws.rs-api:2.0
org.glassfish.jersey.containers:jersey-container-grizzly2-http:2.13
这些是与网络或休息有关的唯一依赖项。
当我对我的资源执行请求时,我得到Internal server error
响应(并且没有在服务器端记录任何内容),但是在编组参数之前,资源的逻辑一切正常。
我怀疑在选择marshaller时会出现问题,因为当我设置资源以使用对象的字符串表示进行响应时(通过toString
方法),它可以正常工作。
答案 0 :(得分:0)
问题在于
@XmlRootElement
case class Result(res: Double)
JAXB需要no-arg构造函数才能正常运行(并且在调试时我得到异常,表明但是其他客户端得到的异常与此问题无关)。所以这个类的正确版本是
@XmlRootElement
case class Result(res: Double) {
def this() = this(0)
}