此问题的答案有资格获得+500信誉bounty。赏金宽限期结束了。Vic Seedoubleyew希望引起更多的注意这个问题。
我试了很多次,但我找不到如何为所有Dropwizard的ViewBundle资源选择根URL。
我的REST端点从/rest
提供服务,因为我已经设置了environment.jersey().setUrlPattern('/rest/*'...)
。
我的静态资产来自/
,因为我注册了一个AssetBundle
,将其指向/
作为其URL的根:bootstrap.addBundle(new AssetsBundle("/" + resourceBasePath + "/public/", "/"));
现在,如果我想获得一个视图,我必须将/rest
附加到它的URL。例如,如果我设置@Path("/view/person/{id}")
,则只能在/rest/view/person/123
处访问。
这不是我想要的我希望它可以在/view/person/123
访问。
我猜从技术上来说这一定是可能的,因为AssetBundle
允许挂载到/
,应该有一种方法可以挂载ViewBundle
到/view
。
我该怎么做?
3条答案
按热度按时间6bc51xsx1#
使用
Dropwizard's ViewBundle
有时可能会很棘手,例如为所有资源设置root path
时。由于Dropwizard
本身并没有提供一个简单的解决方案,据我所知,我们必须有创造性。所以我有两个想法。**为视图创建单独的服务:**这是一种方法,您可以为您的视图创建完全独立的
Dropwizard
服务。通过这种方式,您可以仅为它们设置不同的URL模式。然而,有一个问题,现在你将有两个服务照顾,而不是只有一个,这可能是累人的。使用
Servlet Filter
或Server-Side redirection
:另一种方法是设置Servlet Filter或某种Server-Side
重定向。所以基本上,这将做的是从'/view/'发出请求,并将它们传递到'/rest/view/'。因此,即使您的视图在技术上仍然是从'/rest/view/'提供的,用户也可以通过转到'/view/'来访问它们,如果我理解正确的话,这就是您想要的。wfsdck302#
REST资源和ViewBundle共享相同的Servlet,因此
/rest
前缀将应用于两者。您可以从/view/
上的单独servlet上下文提供视图。字符串
ajsxfq5m3#
当然,我明白你的要求!您可以通过自定义Dropwizard的ViewBundle根URL来实现所需的行为。以下是您的操作方法:
首先,确保已将ViewBundle添加到应用程序中。在run方法(或者initialize方法,如果您愿意的话)中,您需要使用自定义URL模式设置ViewBundle。要实现所需的URL结构,您可以为特定视图设置ViewRenderer和ViewConfigurations:
字符串
现在,您可以使用资源类中的@Path注解为视图配置根URL。举例来说:
型
按照以下步骤操作,您可以轻松地为所有Dropwizard的ViewBundle资源设置根URL。