Java REST注释注入以及在一个请求中注入自定义XML对象

Java REST注释注入以及在一个请求中注入自定义XML对象,java,xml,rest,dependency-injection,unmarshalling,Java,Xml,Rest,Dependency Injection,Unmarshalling,(一) 我正在处理类似于at的情况,但实际上,如果注入了自定义XML对象,如果我不使用@Form注释方法参数,那么就可以注入自定义XML对象 这是要注入的包装器请求对象: @XmlRootElement(name = "request") @XmlAccessorType(XmlAccessType.NONE) @XmlType @Consumes({"application/xml", "application/json"}) public class TestRequest { @P

(一) 我正在处理类似于at的情况,但实际上,如果注入了自定义XML对象,如果我不使用@Form注释方法参数,那么就可以注入自定义XML对象

这是要注入的包装器请求对象:

@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参数(例如,TestRequest中注释的{value}-@PathParam(“value”)。 但这并没有在包装器对象testrequest中解组XML对象测试

@POST
@Path("tests/{value}")
@Consumes("application/xml")
@Produces("application/xml")    
public void addTest(**@Form** TestRequest req);
下面的定义将只注入XML对象测试,而不注入REST注释(例如,URI中的{value}):

2) 我还尝试了另一种方法,捕获对定制MessageBodyReader实现的请求,但在哪里可以找到JAX-RS或RESTEasy的代码、方法或类的细节中迷失了方向,这些代码、方法或类实际上是解析/注入REST注释的(@PathParam、@QueryParam,…)

我还注意到,当方法定义中有@Form注释时,定制MessageBodyReader甚至不会被捕获(可能内置的REST参数会捕获该请求,而定制reader会被忽略)

在这个定制的消息体阅读器解决方案中,我可以以某种方式调用内置的注入提供者,但我没有找到合适的文档,似乎我做错了什么,所有这些都可以通过其他方式更简单地完成


总结一下目标:将REST参数(@PathParam、@QueryParam等)和自定义XML/JSON对象以某种方式注入到一个包装器对象中的一个请求中。 (它使用一个带@Form注释的包装器对象,另一个不带@Form注释的参数,但我希望将所有参数都放在一个包装器对象中)


感谢您提供的任何见解或帮助。

您正在混合JAX-RS和JAXB注释。那是个坏主意。在资源类上使用JAX-RS注释,在表示类上使用JAXB注释。

所以在WS-method上没有办法只有一个参数,所以关于请求的所有内容都可以注入到某个自定义类中?
public void addTest(TestRequest req);  // without @Form annotation now