gpt4 book ai didi

java - Guice、JerseyServletModule、缺少方法依赖项、REST 服务配置

转载 作者:行者123 更新时间:2023-11-30 09:33:58 25 4
gpt4 key购买 nike

我的 Guice 配置看起来像这样:

public class SocialServiceGuiceConfig extends GuiceServletContextListener {
@Override
protected Injector getInjector() {
final Module [] modules = {
new JerseyServletModule() {
@Override
protected void configureServlets() {
bind( GraphApi.class );

bind( SocialUncheckedExceptionMapper.class ).in( Singleton.class );
bind( SocialUnhandledExceptionMapper.class ).in( Singleton.class );

serve( "/*" ).with(
GuiceContainer.class );
}
},
};

return Guice.createInjector( modules );
}
}

我的 API 定义看起来像这样:

@Path( "/{" + BUSINESS_CUSTOMER_PARAMETER + "}" )
public BusinessCustomerApi businessCustomerAndContext(
@PathParam( BUSINESS_CUSTOMER_PARAMETER ) final BusinessCustomerPathParam businessCustomerPathParam,
@QueryParam( LOCALE_PARAMETER ) final String locale) {

我在日志中遇到的异常:

INFO: Binding com.business.social.next.service.api.v1.GraphApi to GuiceManagedComponentProvider with the scope "PerRequest"
Aug 13, 2012 9:20:05 PM com.sun.jersey.spi.inject.Errors processErrorMessages
SEVERE: The following errors and warnings have been detected with resource and/or provider classes:
WARNING: A HTTP GET method, public void com.business.social.next.service.api.v1.GraphApi.get(), MUST return a non-void type.
SEVERE: Missing dependency for method public com.business.social.next.service.api.v1.BusinessCustomerApi com.business.social.next.service.api.v1. GraphApi.graphRequestContext(com.business.social.next.graph.protocol.BusinessCustomer,java.lang.String) at parameter at index 0
Aug 13, 2012 9:20:05 PM org.apache.catalina.core.StandardContext filterStart
SEVERE: Exception starting filter Guice Filter
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.guice.spi.container.servlet.GuiceContainer.initiate(GuiceContainer.java:121)
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:212)
at com.google.inject.servlet.ServletDefinition.init(ServletDefinition.java:117)
at com.google.inject.servlet.ManagedServletPipeline.init(ManagedServletPipeline.java:82)
at com.google.inject.servlet.ManagedFilterPipeline.initPipeline(ManagedFilterPipeline.java:102)
at com.google.inject.servlet.GuiceFilter.init(GuiceFilter.java:172)
at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:275)
at org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:397)
at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:108)
at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:3693)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4342)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1015)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:719)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1015)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
at org.apache.catalina.core.StandardService.start(StandardService.java:448)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
at org.apache.catalina.startup.Catalina.start(Catalina.java:552)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)
Aug 13, 2012 9:20:05 PM org.apache.catalina.core.StandardContext start
SEVERE: Error filterStart
Aug 13, 2012 9:20:05 PM org.apache.catalina.core.StandardContext start
SEVERE: Context [] startup failed due to previous errors

为什么会这样?很难在网上找到信息,也不知道该四处寻找什么途径。

最佳答案

原来我没有关注 @PathParam关于类型的类型规则 BusinessCustomerPathParam .

规则概述如下:http://jsr311.java.net/nonav/releases/1.1/javax/ws/rs/PathParam.html

The type of the annotated parameter, field or property must either:

  • Be PathSegment, the value will be the final segment of the matching part of the path. See UriInfo for a means of retrieving all request path segments.
  • Be List<PathSegment>, the value will be a list of PathSegment corresponding to the path segment(s) that matched the named template parameter. See UriInfo for a means of retrieving all request path segments.
  • Be a primitive type.
  • Have a constructor that accepts a single String argument.
  • Have a static method named valueOf or fromString that accepts a single String argument (see, for example, Integer.valueOf(String)).

我没有采用 String 的构造函数或 static 之一选项。

不幸的是,日志中提供的错误消息不是很有用。

关于java - Guice、JerseyServletModule、缺少方法依赖项、REST 服务配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11957756/

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