1) 我正在处理像How can I pass complex objects as arguments to a RESTful service?这样的类似情况,但实际上注入了我的自定义XML对象,如果注入正确,如果我没有使用@Form注释方法参数。
这是注入的包装器请求对象:
@XmlRootElement(name = "request")
@XmlAccessorType(XmlAccessType.NONE)
@XmlType
@Consumes({"application/xml", "application/json"})
public class TestRequest {
@PathParam(value = "value")
private String value; // this is injected only when @Form param is added to the method parameter definition
@XmlElement(type = Test.class)
private Test test; // this is XML object I want to inject from the REST request
@XmlElement
private String text; // or inject other XML element like this
}
所以这会给我注入REST参数(例如{Value} - 在TestRequest中注释的@PathParam(“value”)。 但这并没有解包包装对象TestRequested中的XML对象Test。
@POST
@Path("tests/{value}")
@Consumes("application/xml")
@Produces("application/xml")
public void addTest(**@Form** TestRequest req);
以下定义只会注入XML对象Test,但不会注入REST注释(例如来自URI的{value}):
public void addTest(TestRequest req); // without @Form annotation now
2)我还尝试了另一种方法,将请求捕获到自定义的MessageBodyReader实现,但是在详细信息中丢失了JAX-RS或RESTEasy的代码,方法或类,实际上这些解析/注入REST注释(@ PathParam,@ QueryParam,...)。
我还注意到,当方法定义中有@Form注释时,自定义的MessageBodyReader甚至没有被捕获(可替换地内置一个用于REST参数捕获请求,然后忽略自定义读取器)。
我可以在这个自定义消息体阅读器解决方案中以某种方式调用内置注入提供程序,但我没有找到合适的文档,似乎我做错了所有事情都可以通过其他方式更简单。
总结目标:在一个包装器对象中的一个请求中以某种方式注入REST参数(@ PathParam,@ QueryParam等)和自定义XML / JSON对象。 (它适用于一个注释@Form的包装器对象,另一个参数没有@Form注释,但我想将所有包含在一个包装器对象中。)
感谢您的任何见解或帮助。
答案 0 :(得分:0)
您正在混合使用JAX-RS和JAXB注释。这是个坏主意。在资源类上使用JAX-RS注释,在表示类上使用JAXB注释。