泽西岛模型验证例外情况 - 未找到注入源

2022-09-04 19:35:16

我遇到了一个奇怪的问题,我绝对不明白,泽西岛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();
    }

查询参数“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。

如果有人有一个伊迪亚!


答案 1

SomeValueDTO需要可转换。实现此目的的选项:

  1. 返回类型的 A (SomeValueDTO)public static SomeValueDTO valueOf(String param)
  2. 返回类型的 A (SomeValueDTO)public static SomeValueDTO fromString(String param)
  3. 或者接受字符串的公共构造函数
  4. 实现参数转换器。您可以在此处查看示例

在前三种情况下,您都需要通过在构造函数或上述方法之一中分析 String 来相应地构造实例。

通常,您只想使用无法编辑的 for 第三方类。否则,请为您自己的类使用其他三个选项。ParamConverter


答案 2

从泽西岛 2.0 开始,您可以用作输入,但必须在 DTO 变量中设置全部:@BeanParam@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"
 }});

来源答案:https://stackoverflow.com/a/17309823/3410465


推荐