gpt4 book ai didi

java - REST 异常需要构造函数

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:09:08 24 4
gpt4 key购买 nike

我有一个 rest web 服务,它从没有公共(public)空构造函数的 FoodItem 类返回对象。但是,它包含另一个非空参数的构造函数。

我遇到了这个异常

May 15, 2013 11:06:50 PM com.sun.jersey.spi.container.ContainerResponse logException
SEVERE: Mapped exception to response: 500 (Internal Server Error)
javax.ws.rs.WebApplicationException: com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException: 1 counts of IllegalAnnotationExceptions
com.mypackage.eattel.food.FoodItemImpl does not have a no-arg default constructor.
this problem is related to the following location:
at com.mypackage.eattel.food.FoodItemImpl

at com.sun.jersey.core.provider.jaxb.AbstractRootElementProvider.writeTo(AbstractRootElementProvider.java:159)
at com.sun.jersey.spi.container.ContainerResponse.write(ContainerResponse.java:306)
at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1479)
at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1391)
at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1381)
at com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:416)
at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:538)
at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:716)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:164)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:462)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:562)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:395)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:250)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:188)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:302)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException: 1 counts of IllegalAnnotationExceptions
com.mypackage.eattel.food.FoodItemImpl does not have a no-arg default constructor.
this problem is related to the following location:
at com.mypackage.eattel.food.FoodItemImpl

at com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException$Builder.check(Unknown Source)
at com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl.getTypeInfoSet(Unknown Source)
at com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl.<init>(Unknown Source)
at com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl$JAXBContextBuilder.build(Unknown Source)
at com.sun.xml.internal.bind.v2.ContextFactory.createContext(Unknown Source)
at com.sun.xml.internal.bind.v2.ContextFactory.createContext(Unknown Source)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at javax.xml.bind.ContextFinder.newInstance(Unknown Source)
at javax.xml.bind.ContextFinder.find(Unknown Source)
at javax.xml.bind.JAXBContext.newInstance(Unknown Source)
at javax.xml.bind.JAXBContext.newInstance(Unknown Source)
at com.sun.jersey.core.provider.jaxb.AbstractJAXBProvider.getStoredJAXBContext(AbstractJAXBProvider.java:194)
at com.sun.jersey.core.provider.jaxb.AbstractJAXBProvider.getJAXBContext(AbstractJAXBProvider.java:187)
at com.sun.jersey.core.provider.jaxb.AbstractJAXBProvider.getMarshaller(AbstractJAXBProvider.java:165)
at com.sun.jersey.core.provider.jaxb.AbstractJAXBProvider.getMarshaller(AbstractJAXBProvider.java:144)
at com.sun.jersey.core.provider.jaxb.AbstractRootElementProvider.writeTo(AbstractRootElementProvider.java:151)
... 24 more

当我在我的 FoodItem 类中创建 public 空参数构造函数时,异常解决了,我得到了准确的结果。

我的问题:如何在不添加空构造函数的情况下解决该异常?,在我的业务逻辑中不可能有空构造函数。

提前致谢

编辑我的类实现了一个接口(interface),也许这些信息可以帮助你。

编辑2如果你想要我的 web.xml、我的类、我的接口(interface)或我的网络服务的代码,我已经准备好了

编辑3

这是网络服务中的代码

@GET
@Produces(MediaType.TEXT_XML)
public FoodItem getRestarantsFordBrowser() {
return FoodItemImpl.getInstance(1);
}

如你所见,我正在调用静态方法。

静态方法的代码是:

public static FoodItem getInstance(int ID) {
return new FoodItemImpl(ID);
}

并且此构造函数是私有(private)的,因此我不需要公共(public)构造函数来创建对象,并且在我的 Web 服务中我正在调用静态方法,因此我不必显式创建对象。

最佳答案

在 Java 中,如果您不编写构造函数,则 java 运行时将添加默认构造函数,并使用默认值初始化实例。但是,如果您在类中添加构造函数,那么 JVM 不会添加默认构造函数,您应该添加默认构造函数。背后的原因,为什么 JVM 在没有定义构造函数时添加默认构造函数是因为,如果没有,那么您将无法创建该类的对象。但是,如果您添加了一个构造函数,那么 JVM 会假设您有一个构造函数,并且使用该构造函数您应该能够创建对象。

关于java - REST 异常需要构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16580186/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com