本文将为您提供关于独立Servlet5容器中的JAX-RS(Jersey)API无法启动的详细介绍,我们还将为您解释servlet-apijarnotloaded的相关知识,同时,我们还将为您提供关于
本文将为您提供关于独立 Servlet 5 容器中的 JAX-RS (Jersey) API 无法启动的详细介绍,我们还将为您解释servlet-api jar not loaded的相关知识,同时,我们还将为您提供关于HttpServlet类和与Jersey一起使用时的困惑、HTTP状态500 javax.servlet.ServletException:Servlet [Jersey RESTful App]的Servlet.init()抛出异常java.lang.IllegalArgumentException、java – Guice Jersey:添加所有的资源和提供者,而不需要绑定到Jersey Servlet、java – Jersey:com.sun.jersey.spi.inject.Errors $ErrorMessagesException的实用信息。
本文目录一览:- 独立 Servlet 5 容器中的 JAX-RS (Jersey) API 无法启动(servlet-api jar not loaded)
- HttpServlet类和与Jersey一起使用时的困惑
- HTTP状态500 javax.servlet.ServletException:Servlet [Jersey RESTful App]的Servlet.init()抛出异常java.lang.IllegalArgumentException
- java – Guice Jersey:添加所有的资源和提供者,而不需要绑定到Jersey Servlet
- java – Jersey:com.sun.jersey.spi.inject.Errors $ErrorMessagesException
独立 Servlet 5 容器中的 JAX-RS (Jersey) API 无法启动(servlet-api jar not loaded)
您需要使用 Jersey 3.x。 3.x 行是使用 Jakarta 命名空间的第一行。您拥有所有 Jakarta 依赖项(JAX-RS、Servlet),只是您使用的 Jersey 版本没有使用它们。有关最新的 3.x 版本,请参阅 Jersey docs。
在新的 Jakarta EE 中,所有 javax
包装都已更改为 jakarta
,例如jakarta.ws.rs.ApplicationPath
。一旦您更改 Jersey 版本(假设您没有任何其他旧的依赖项,您应该会收到导入错误。所有 javax
导入都应该显示错误。它们都应该用 jakarta
切换出来。所有 javax
导入(包括 JAX-RS、Servlet、Inject 等)。
HttpServlet类和与Jersey一起使用时的困惑
我正在构建实现RESTful API的servlet。我知道Jersey是用于解密和使用给定URL的框架。如何与HttpServlet
课程结合使用。
我不明白两者如何相互配合。我想这是一个很广泛的问题,但是我在阅读方面做得相当不错,但仍然停留在这个看似微不足道的概念上。我尝试HttpServlet
使用扩展类并使用Jersey注释的类来部署应用程序。
@Path("/api")
public class API extends HttpServlet{
@GET
@Path("/{name}")
@Produces("text/hmtl")
public String doGetSayHello(@PathParam("name") String name){
return "Hello" + name;
}
@GET
@Path("/articles")
@Produces("text/json")
public String doGetArticles(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException
{
JSONObject obj = new JSONObject();
obj.put("interns",interns);
obj.put("company","Stack Overflow");
return obj.toString();
}
}
任何帮助或信息材料将不胜感激!
HTTP状态500 javax.servlet.ServletException:Servlet [Jersey RESTful App]的Servlet.init()抛出异常java.lang.IllegalArgumentException
我通过使用apache-tomcat-9.0.38和Jersey 2.16使其正常工作
java – Guice Jersey:添加所有的资源和提供者,而不需要绑定到Jersey Servlet
我必须使用bind手动将所有泽西资源类添加到JerseyServletModule中:
@Override protected Injector getInjector() { return Guice.createInjector(new JerseyServletModule() { @Override protected void configureServlets() { install(new JpaPersistModule("dbname")); filter("/*").through(PersistFilter.class); /* bind the REST resources and serve*/ bind(Hello.class); serve("/*").with(GuiceContainer.class); } }); }
我希望能够忽略对每个单一资源和提供者的绑定的使用,并在jersey-guice文档中找到一个备注:http://jersey.java.net/nonav/apidocs/1.8/contribs/jersey-guice/com/sun/jersey/guice/spi/container/servlet/package-summary.html
它基本上说可以将球衣资源的注册通过球衣服务.但是,我无法使用所述方法来管理这个问题:
@Override protected Injector getInjector() { return Guice.createInjector(new JerseyServletModule() { @Override protected void configureServlets() { bind(GuiceResource.class); Map<String,String> params = new HashMap<String,String>(); params.put(PackagesResourceConfig.PROPERTY_PACKAGES,"unbound"); serve("/*").with(GuiceContainer.class,params); } } });
遗憾的是,我无法获得关于泽西资源注册过程的更多信息.
任何帮助将不胜感激.当然,如果需要,我可以提供额外的信息!
谢谢.
解决方法
/* * The following line will scan ausbdsoccer.server.resources package for Jersey Resources */ params.put("com.sun.jersey.config.property.packages","ausbdsoccer.server.resources");
你去了
不要忘了将params地图传给你的GuiceContainer.class!
java – Jersey:com.sun.jersey.spi.inject.Errors $ErrorMessagesException
我收到此错误(“完整”日志)
INFO: Scanning for root resource and provider classes in the packages: de.tum.fml.idp.backend.rest Dez 04,2013 2:29:40 PM com.sun.jersey.api.core.ScanningResourceConfig logClasses INFO: Root resource classes found: class de.tum.fml.idp.backend.rest.PlayerWebService class de.tum.fml.idp.backend.rest.RestSample Dez 04,2013 2:29:40 PM com.sun.jersey.api.core.ScanningResourceConfig init INFO: No provider classes found. Dez 04,2013 2:29:41 PM com.sun.jersey.server.impl.application.WebApplicationImpl _initiate INFO: Initiating Jersey application,version 'Jersey: 1.8 06/24/2011 12:17 PM' Dez 04,2013 2:29:42 PM com.sun.jersey.spi.inject.Errors processErrorMessages SEVERE: The following errors and warnings have been detected with resource and/or provider classes: SEVERE: Producing media type conflict. The resource methods public java.util.List de.tum.fml.idp.backend.rest.PlayerWebService.getPlayerIDs() and public de.tum.fml.idp.gamelog.backend.beans.Player de.tum.fml.idp.backend.rest.PlayerWebService.createuser() can produce the same media type SEVERE: Producing media type conflict. The resource methods public java.util.List de.tum.fml.idp.backend.rest.PlayerWebService.getPlayers() and public de.tum.fml.idp.gamelog.backend.beans.Player de.tum.fml.idp.backend.rest.PlayerWe bService.createuser() can produce the same media type 2013-12-04 14:29:42.010:WARN:/0.1-SNAPSHOT:unavailable com.sun.jersey.spi.inject.Errors$ErrorMessagesException at com.sun.jersey.spi.inject.Errors.processErrorMessages(Errors.java:170) at com.sun.jersey.spi.inject.Errors.postProcess(Errors.java:136) at com.sun.jersey.spi.inject.Errors.processWithErrors(Errors.java:199) at com.sun.jersey.server.impl.application.WebApplicationImpl.initiate(WebApplicationImpl.java:771) at com.sun.jersey.server.impl.application.WebApplicationImpl.initiate(WebApplicationImpl.java:766) at com.sun.jersey.spi.container.servlet.ServletContainer.initiate(ServletContainer.java:488) at com.sun.jersey.spi.container.servlet.ServletContainer$InternalWebComponent.initiate(ServletContainer.java:318) at com.sun.jersey.spi.container.servlet.WebComponent.load(WebComponent.java:609) at com.sun.jersey.spi.container.servlet.WebComponent.init(WebComponent.java:210) at com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:373) at com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:556) at javax.servlet.GenericServlet.init(GenericServlet.java:241) at org.eclipse.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:477) at org.eclipse.jetty.servlet.ServletHolder.doStart(ServletHolder.java:293) at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64) at org.eclipse.jetty.servlet.ServletHandler.initialize(ServletHandler.java:730) at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:254) at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1240) at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:689) at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:482) at org.eclipse.jetenter code herety.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64) at org.eclipse.jetty.server.handler.HandlerCollection.doStart(HandlerCollection.java:229) at org.eclipse.jetty.server.handler.ContextHandlerCollection.doStart(ContextHandlerCollection.java:172) at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64) at org.eclipse.jetty.server.handler.HandlerCollection.doStart(HandlerCollection.java:229) at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64) at org.eclipse.jetty.server.handler.HandlerWrapper.doStart(HandlerWrapper.java:95) at org.eclipse.jetty.server.Server.doStart(Server.java:281) at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:601) at org.codehaus.cargo.container.jetty.internal.JettyExecutorThread.run(JettyExecutorThread.java:69) 2013-12-04 14:29:42.022:INFO:oejw.WebInfConfiguration:Extract jar:file:/C:/Users/Stefan/DropBox/Studium/TUM/IDP/repo/backend/backend/target/cargo/configurations/jetty7x/cargocpc.war!/ to C:\Users\Stefan\AppData\Local\Temp\jetty-0.0.0.0-8080-cargocpc.war-_cargocpc-any-\webapp 2013-12-04 14:29:42.052:INFO:oejsh.ContextHandler:started o.e.j.w.WebAppContext{/cargocpc,file:/C:/Users/Stefan/AppData/Local/Temp/jetty-0.0.0.0-8080-cargocpc.war-_cargocpc-any-/webapp/},C:\Users\Stefan\DropBox\Studium\TUM\IDP\repo\backend\backend\target\cargo\configurations\jetty7x\cargocpc.war 2013-12-04 14:29:42.108:INFO:oejs.AbstractConnector:Started SelectChannelConnector@0.0.0.0:8080
这是我用过的代码:
package de.tum.fml.idp.backend.rest; import java.util.List; import javax.ws.rs.GET; import javax.ws.rs.POST; import javax.ws.rs.Path; import javax.ws.rs.PathParam; import de.tum.fml.idp.backend.rest.interfaces.PlayerManagment; import de.tum.fml.idp.gamelog.backend.beans.Player; @Path("/players") public class PlayerWebService implements PlayerManagment { @Override @GET public Player createuser() { // Todo Auto-generated method stub return new Player(); } @Override @POST public Player updatePlayer(Player player) { // Todo Auto-generated method stub return new Player(); } @Override @GET @Path("/getPlayer/{param}") public Player getPlayer(@PathParam("param") int id) { // Todo Auto-generated method stub Player bla = new Player(); bla.setId(-1); return bla; } @Override @GET public List<Player> getPlayers() { // Todo Auto-generated method stub return null; } @Override @GET public List<Integer> getPlayerIDs() { // Todo Auto-generated method stub return null; } }
和Player类.
package de.tum.fml.idp.gamelog.backend.beans; import java.util.ArrayList; import java.util.List; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.OnetoMany; import javax.xml.bind.annotation.XmlRootElement; import org.hibernate.annotations.Entity; //@XmlRootElement public class Player { // @Id // @GeneratedValue private int id; private String name; private String password; Avatar avatar; private PlayerProperties properties; private int tempId; private int availablePropertyPoints; private int totalPropertyPoints; // @OnetoMany private ArrayList<AchievedAchievment> achievments; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String string) { this.name = string; } public String getpassword() { return password; } public void setPassword(String password) { this.password = password; } public Avatar getAvatar() { return avatar; } public void setAvatar(Avatar avatar) { this.avatar = avatar; } public PlayerProperties getProperties() { return properties; } public void setProperties(PlayerProperties properties) { this.properties = properties; } public int getTempId() { return tempId; } public void setTempId(int tempId) { this.tempId = tempId; } public int getAvailablePropertyPoints() { return availablePropertyPoints; } public void setAvailablePropertyPoints(int availablePropertyPoints) { this.availablePropertyPoints = availablePropertyPoints; } public int getTotalPropertyPoints() { return totalPropertyPoints; } public void setTotalPropertyPoints(int totalPropertyPoints) { this.totalPropertyPoints = totalPropertyPoints; } public List<AchievedAchievment> getAchievments() { if(achievments == null) achievments = new ArrayList<AchievedAchievment>(); return achievments; } public void setAchievments(ArrayList<AchievedAchievment> achievments) { this.achievments = achievments; } public void addAchievment(AchievedAchievment aa1) { if(achievments == null) achievments = new ArrayList<AchievedAchievment>(); if(aa1.getPlayer() != this) throw new RuntimeException("Player: Achievment was already given to another user"); else achievments.add(aa1); } }
有谁知道为什么这不起作用?我已经尝试过评论几乎所有的东西,几个不同的maven依赖,但它不会开始工作.
“玩具示例”工作正常…: – /
我希望你能帮帮我,
KR,
解决方法
SEVERE: Producing media type conflict. The resource methods public java.util.List de.tum.fml.idp.backend.rest.PlayerWebService.getPlayerIDs() and public de.tum.fml.idp.gamelog.backend.beans.Player de.tum.fml.idp.backend.rest.PlayerWebService.createuser() can produce the same media type
SEVERE: Producing media type conflict. The resource methods public java.util.List de.tum.fml.idp.backend.rest.PlayerWebService.getPlayers() and public de.tum.fml.idp.gamelog.backend.beans.Player de.tum.fml.idp.backend.rest.PlayerWebService.createuser() can produce the same media type
这意味着您有相同路径的多个GET端点(在类’annotation(“/ players”)中定义),产生相同的媒体类型:
@GET public List<Player> getPlayers() @GET public Player createuser() @GET public List<Integer> getPlayerIDs()
在向玩家发送GET请求时,泽西岛无法判断您要呼叫哪一个.您需要为其中一些端点定义单独的路径.
如果您的意图实际上是让它们具有相同的路径,则需要添加具有不同媒体类型的@Produces注释,因此Jersey可以根据Accept标头选择正确的方法.如果请求正文请求,您也可以使用@Consumes注释.否则,您需要添加@Path注释或更改方法的请求类型,以避免此冲突.
关于独立 Servlet 5 容器中的 JAX-RS (Jersey) API 无法启动和servlet-api jar not loaded的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于HttpServlet类和与Jersey一起使用时的困惑、HTTP状态500 javax.servlet.ServletException:Servlet [Jersey RESTful App]的Servlet.init()抛出异常java.lang.IllegalArgumentException、java – Guice Jersey:添加所有的资源和提供者,而不需要绑定到Jersey Servlet、java – Jersey:com.sun.jersey.spi.inject.Errors $ErrorMessagesException等相关内容,可以在本站寻找。
本文标签: