簡體   English   中英

Spring Boot-找不到合適的構造函數錯誤

[英]Spring Boot - Could not find a suitable constructor error

嗨,我正在嘗試從主類中讀取文件作為參數,並在Spring Boot中訪問另一個類中的參數。 主類看起來像這樣

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:在org.glassfish.jersey.internal.inject.JerseyClassAnalyzer.getConstructor(JerseyClassAnalyzer.java:192)〜[jersey-common-2.25.1。com.springsampleapplication.UsersResources類中找不到合適的構造函數。 jar:na]

可能是Spring嘗試初始化UsersResources類並期望僅使用String參數的構造函數不帶參數的問題。 嘗試添加這樣的構造函數: public UsersResources() {}

想到的另一種想法是,這可能是由於UsersResources構造函數沒有可見性修飾符(這意味着它受到程序包保護),您可以嘗試向其添加public可見性修飾符(盡管Spring甚至可以初始化私有構造函數) 。 但是, DemorestApplicationUsersResources類是否在同一程序包中? 否則,代碼將無法編譯,因為在包的外部看UsersResources(String value) 。但是在這種情況下,錯誤有些不同: The constructor xxx is undefined ,所以可能不是這種情況。

由於您似乎正在使用Jersey,因此需要一個public構造函數:

根資源類由JAX-RS運行時實例化,並且必須具有一個公共構造函數,JAX-RS運行時可以為其提供所有參數值。 請注意,根據該規則,零參數構造函數是允許的。

請參閱如何在Jersey中注冊靜態類?

由於您已經在類中定義了構造函數,因此不會生成默認構造函數。 解決方法是使用@Component等使此類成為Spring組件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM