Spring Boot - 找不到合适的构造函数错误

时间:2018-03-06 15:14:33

标签: java spring-boot constructor jersey command-line-arguments

您好我正在尝试从主类读取文件作为参数并在Spring启动中访问另一个类中的参数。 主要类看起来像这样

public class DemorestApplication extends SpringBootServletInitializer {

public static void main(String[] args) throws IOException {

    new DemorestApplication().configure(new SpringApplicationBuilder(DemorestApplication.class)).run(args);

    new UsersResources(args[0]);

}
}

我正在将一个参数传递给另一个名为UsersResources构造函数的类

@Path("/sample")
public class UsersResources {

private String value;
UsersResources(String value){
    this.value=value;
}

//new code
@GET
@Path("Data/file/{path}")
@Produces("application/json")

public Map<String, Map<String, List<Map<String, Map<String, String>>>>> getApplicationName1(@PathParam("path") String path) throws IOException  {
ReadExceldy prop = new ReadExceldy();
FileInputStream Fs = new FileInputStream(System.getProperty("user.dir")+"\\"+value);
Properties properties = new Properties();
properties.load(Fs);
String Loc=properties.getProperty("filepath"); 
String Na=path;
String filename=Loc+Na;
return prop.fileToJson(filename);
}
}

我试图运行此代码,但它发出错误说

  

java.lang.NoSuchMethodException:在com.springsampleapplication.UsersResources类中找不到合适的构造函数   在org.glassfish.jersey.internal.inject.JerseyClassAnalyzer.getConstructor(JerseyClassAnalyzer.java:192)~ [jersey-common-2.25.1.jar:na]

3 个答案:

答案 0 :(得分:0)

问题可能是Spring尝试初始化UsersResources类并期望一个没有参数的构造函数,只要它只有一个String参数。尝试添加此类构造函数:public UsersResources() {}

我想到的其他想法是,这可能是因为UsersResources构造函数没有可见性修饰符(这意味着它受包保护),您可以尝试向其添加public可见性修饰符(虽然Spring应该能够初始化甚至私有构造函数)。虽然DemorestApplicationUsersResources类在同一个包中吗?否则代码不应该编译,因为UsersResources(String value)在它所在的包之外是不可见的。但是在这种情况下错误有点不同:The constructor xxx is undefined,所以可能情况并非如此。

答案 1 :(得分:0)

由于您似乎使用的是Jersey,因此需要public构造函数:

  

根资源类由JAX-RS运行时实例化,并且必须具有公共构造函数,JAX-RS运行时可以为其提供所有参数值。请注意,在此规则下允许使用零参数构造函数。

请参阅How to register a static class in Jersey?

答案 2 :(得分:0)

由于您已经在类中定义了构造函数,因此不会生成默认构造函数。一种解决方法是使用@Component等将此类作为Spring组件。