Jersey ModelValidationException - 未找到注入源
Jersey ModelValidationException - No Injection source found
我遇到了一个奇怪的问题,我完全不明白 Jersey 2.6。
我无法解释原因,但是 其中一个查询参数 使球衣抛出 ModelValidationException
@ApiOperation("Save")
@PUT
public Response save(
@HeaderParam("token") final String token,
@QueryParam("someValue") final SomeValueDTO someValue,
@QueryParam("anotherParam") final int anotherParam) throws TechnicalException {
return Response.ok().build();
}
queryParam 'someValue' 使球衣抛出:
org.glassfish.jersey.server.model.ModelValidationException: Validation of the application resource model has failed during application initialization.|[[FATAL] No injection source found for a parameter of type public javax.ws.rs.core.Response ch.rodano.studies.api.resources.PagesResource.save(java.lang.String,ch.rodano.studies.api.dto.JSONValueDTO,int) throws ch.rodano.studies.exceptions.RightException,ch.rodano.studies.configuration.exceptions.NoNodeException at index 1.; source='ResourceMethod{httpMethod=PUT, consumedTypes=[], producedTypes=[application/json], suspended=false, suspendTimeout=0, suspendTimeoutUnit=MILLISECONDS, invocable=Invocable{handler=ClassBasedMethodHandler{handlerClass=class ch.rodano.studies.api.resources.PagesResource, handlerConstructors=[org.glassfish.jersey.server.model.HandlerConstructor@41ed3918]}, definitionMethod=public javax.ws.rs.core.Response ch.rodano.studies.api.resources.PagesResource.save(java.lang.String,ch.rodano.studies.api.dto.JSONValueDTO,int) throws ch.rodano.studies.exceptions.RightException,ch.rodano.studies.configuration.exceptions.NoNodeException, parameters=[Parameter [type=class java.lang.String, source=token, defaultValue=null], Parameter [type=class ch.rodano.studies.api.dto.JSONValueDTO, source=valuesASD, defaultValue=null], Parameter [type=int, source=visitPk, defaultValue=null]], responseType=class javax.ws.rs.core.Response}, nameBindings=[]}']
如果我使用 String 而不是 SomeValueDTO 一切都很好。
SomeValueDTO 是一个非常经典的 POJO,具有空构造函数和 getters/setters。
如果有人有想法!!
SomeValueDTO
需要兑换。完成此操作的选项:
- A
public static SomeValueDTO valueOf(String param)
returns 类型 (SomeValueDTO)
- A
public static SomeValueDTO fromString(String param)
returns 类型 (SomeValueDTO)
- 或者接受字符串的public构造函数
- 实施
ParamConverter
. You can see an example here
在前三种情况中的任何一种情况下,您都需要通过在构造函数或上述方法之一中解析字符串来相应地构造实例。
通常,您只想将 ParamConverter
用于无法编辑的第三方 类。否则为您自己使用其他三个选项 类.
从 Jersey 2.0 开始,您可以使用 @BeanParam
作为输入,但您必须在 DTO 变量中设置所有 @QueryParam
:
@ApiOperation("Save")
@PUT
public Response save(@BeanParam SomeValueDTO inputValue)
{
String prop1 = inputValue.prop1;
String prop2 = inputValue.prop2;
String prop3 = inputValue.prop3;
}
SomeValueDTO.java
将是:
public class SomeValueDTO{
@QueryParam("prop1")
public String prop1;
@QueryParam("prop2")
public String prop2;
@QueryParam("prop3")
public String prop3;
}
http 调用可以是:
$http.get('insert-path', {
params: {
prop1: "prop1value",
prop2: "prop2value",
prop3: "prop3value"
}});
源答案:
我遇到了同样的问题。只需将 next 放入您的 web.xml
<servlet>
<servlet-name>jersey</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>jersey.config.server.provider.classnames</param-name>
<param-value>
org.glassfish.jersey.media.multipart.MultiPartFeature;
org.glassfish.jersey.filter.LoggingFilter
</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
我遇到了一个奇怪的问题,我完全不明白 Jersey 2.6。
我无法解释原因,但是 其中一个查询参数 使球衣抛出 ModelValidationException
@ApiOperation("Save")
@PUT
public Response save(
@HeaderParam("token") final String token,
@QueryParam("someValue") final SomeValueDTO someValue,
@QueryParam("anotherParam") final int anotherParam) throws TechnicalException {
return Response.ok().build();
}
queryParam 'someValue' 使球衣抛出:
org.glassfish.jersey.server.model.ModelValidationException: Validation of the application resource model has failed during application initialization.|[[FATAL] No injection source found for a parameter of type public javax.ws.rs.core.Response ch.rodano.studies.api.resources.PagesResource.save(java.lang.String,ch.rodano.studies.api.dto.JSONValueDTO,int) throws ch.rodano.studies.exceptions.RightException,ch.rodano.studies.configuration.exceptions.NoNodeException at index 1.; source='ResourceMethod{httpMethod=PUT, consumedTypes=[], producedTypes=[application/json], suspended=false, suspendTimeout=0, suspendTimeoutUnit=MILLISECONDS, invocable=Invocable{handler=ClassBasedMethodHandler{handlerClass=class ch.rodano.studies.api.resources.PagesResource, handlerConstructors=[org.glassfish.jersey.server.model.HandlerConstructor@41ed3918]}, definitionMethod=public javax.ws.rs.core.Response ch.rodano.studies.api.resources.PagesResource.save(java.lang.String,ch.rodano.studies.api.dto.JSONValueDTO,int) throws ch.rodano.studies.exceptions.RightException,ch.rodano.studies.configuration.exceptions.NoNodeException, parameters=[Parameter [type=class java.lang.String, source=token, defaultValue=null], Parameter [type=class ch.rodano.studies.api.dto.JSONValueDTO, source=valuesASD, defaultValue=null], Parameter [type=int, source=visitPk, defaultValue=null]], responseType=class javax.ws.rs.core.Response}, nameBindings=[]}']
如果我使用 String 而不是 SomeValueDTO 一切都很好。 SomeValueDTO 是一个非常经典的 POJO,具有空构造函数和 getters/setters。
如果有人有想法!!
SomeValueDTO
需要兑换。完成此操作的选项:
- A
public static SomeValueDTO valueOf(String param)
returns 类型 (SomeValueDTO) - A
public static SomeValueDTO fromString(String param)
returns 类型 (SomeValueDTO) - 或者接受字符串的public构造函数
- 实施
ParamConverter
. You can see an example here
在前三种情况中的任何一种情况下,您都需要通过在构造函数或上述方法之一中解析字符串来相应地构造实例。
通常,您只想将 ParamConverter
用于无法编辑的第三方 类。否则为您自己使用其他三个选项 类.
从 Jersey 2.0 开始,您可以使用 @BeanParam
作为输入,但您必须在 DTO 变量中设置所有 @QueryParam
:
@ApiOperation("Save")
@PUT
public Response save(@BeanParam SomeValueDTO inputValue)
{
String prop1 = inputValue.prop1;
String prop2 = inputValue.prop2;
String prop3 = inputValue.prop3;
}
SomeValueDTO.java
将是:
public class SomeValueDTO{
@QueryParam("prop1")
public String prop1;
@QueryParam("prop2")
public String prop2;
@QueryParam("prop3")
public String prop3;
}
http 调用可以是:
$http.get('insert-path', {
params: {
prop1: "prop1value",
prop2: "prop2value",
prop3: "prop3value"
}});
源答案:
我遇到了同样的问题。只需将 next 放入您的 web.xml
<servlet>
<servlet-name>jersey</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>jersey.config.server.provider.classnames</param-name>
<param-value>
org.glassfish.jersey.media.multipart.MultiPartFeature;
org.glassfish.jersey.filter.LoggingFilter
</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>