java.lang.IllegalStateException: No primary or default constructor found for interface javax.servlet.http.HttpServletRequest at org.springframework.web.reactive.result.method.annotation.ModelAttributeMethodArgumentResolver.createAttribute(ModelAttributeMethodArgumentResolver.java:231) ~[spring-webflux-5.2.15.RELEASE.jar:5.2.15.RELEASE] Suppressed: reactor.core.publisher.FluxOnAssembly$OnAssemblyException: Error has been observed at the following site(s): |_ checkpoint ⇢ org.springframework.cloud.gateway.filter.WeightCalculatorWebFilter [DefaultWebFilterChain] |_ checkpoint ⇢ org.springframework.boot.actuate.metrics.web.reactive.server.MetricsWebFilter [DefaultWebFilterChain] |_ checkpoint ⇢ HTTP GET "/trans/getPutUploardUrl?fileMd5=561140fe560fcce190e72479c57c971d&fileSize=114666&fileName=123.jpg" [ExceptionHandlingWebHandler]
时间: 2023-11-25 19:05:25 浏览: 534
这个错误是由于在使用Spring WebFlux框架时,没有找到接口`javax.servlet.http.HttpServletRequest`的默认构造函数所引起的。在Spring WebFlux中,`ModelAttributeMethodArgumentResolver`会尝试为请求中的每个模型属性创建一个实例,但是由于接口没有默认构造函数,所以会抛出`IllegalStateException`异常。
要解决这个问题,你可以尝试使用具体的实现类来代替接口作为方法参数,或者通过自定义解析器来解析该接口。另外,确保你的依赖项中包含了适当的servlet API依赖项,以便正确地解析HttpServletRequest。
请注意,这只是一个初步的解释,具体的解决方案可能因你的代码和环境而有所不同。如果你需要更详细的帮助,请提供更多的上下文信息。
相关问题
java.lang.IllegalStateException: No primary or default constructor found for interface javax.servlet.http.HttpServletRequest at org.springframework.web.reactive.result.method.annotation.ModelAttributeMethodArgumentResolver.createAttribute(ModelAttributeM
您提到的异常是由于在Spring WebFlux中使用了ModelAttribute注解,但是在参数中使用了HttpServletRequest接口而不是具体的实现类,导致无法找到默认的构造函数而抛出的异常。
解决这个问题的方法是将参数类型改为具体的ServletRequest实现类,例如使用HttpServletRequestWrapper或者MultipartHttpServletRequest等。另外,您也可以考虑使用其他的注解或者对象来代替HttpServletRequest,以便更好地适应WebFlux框架的特性。
java.lang.illegalstateexception: no primary or default constructor found for interface java.util.list
### 回答1:
这个错误是因为在使用Java中的List接口时,没有找到主要或默认的构造函数。List是一个接口,不能直接实例化,需要使用其实现类(如ArrayList、LinkedList等)来创建List对象。在创建List对象时,需要使用实现类的构造函数来初始化List对象。如果没有使用正确的构造函数,就会出现这个错误。
### 回答2:
这个错误的具体含义是没有找到java.util.list这个接口的主构造函数或默认构造函数。在Java编程中,一个类必须要有构造函数才能被实例化。构造函数是一个特殊的方法,用于在创建对象时初始化对象的各个成员变量。
然而,接口没有成员变量,也没有构造函数。它只提供了一些方法的声明。因此,不能直接创建一个接口的实例。通常我们使用实现该接口的类来创建对象。
在这种情况下,错误的原因可能是尝试使用List接口来创建一个对象,而不是使用实现List接口的类来创建对象。例如:
List<Integer> myList = new List<Integer>(); //错误的写法
正确的做法是使用实现List接口的类来创建对象,例如:
List<Integer> myList = new ArrayList<Integer>();
如果您仍然使用了List接口而不是实现它的类来创建对象,您需要更改代码以使用正确的类。否则,这个错误将继续出现并且您的程序将无法工作。
### 回答3:
这个错误通常出现在使用反射机制创建一个接口的实例时。在Java中,接口无法被实例化,因为它们没有具体的实现,只有定义。当使用反射机制创建接口实例时,Java运行时系统会试图查找默认构造函数(即没有参数的公共构造函数),但接口没有默认构造函数,所以会抛出IllegalStateException异常。
解决这个问题的方法是通过实现这个接口来创建一个对象。可以通过使用ArrayList等实现了List接口的具体类来实现List接口,然后创建一个List对象。例如:
```
List<String> myList = new ArrayList<>();
```
这样就不会出现这个错误了,因为ArrayList类有一个默认构造函数。当然,如果在需要用到接口时需要创建自己的类,则需要提供一个public构造函数,以便Java运行时系统可以使用它。
总之,Java.lang.IllegalStateException:no primary or default constructor found for interface java.util.List是因为尝试创建一个接口的实例,而接口无法直接实例化。正确的方法是使用实现了接口的具体类来创建对象,或提供一个public构造函数,以便Java运行时系统可以使用它。
阅读全文