java 如何设置Dropwizard的ViewBundle根URL

pbpqsu0x  于 2023-08-01  发布在  Java
关注(0)|答案(3)|浏览(96)

此问题的答案有资格获得+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
我该怎么做?

6bc51xsx

6bc51xsx1#

使用Dropwizard's ViewBundle有时可能会很棘手,例如为所有资源设置root path时。由于Dropwizard本身并没有提供一个简单的解决方案,据我所知,我们必须有创造性。所以我有两个想法。

**为视图创建单独的服务:**这是一种方法,您可以为您的视图创建完全独立的Dropwizard服务。通过这种方式,您可以仅为它们设置不同的URL模式。然而,有一个问题,现在你将有两个服务照顾,而不是只有一个,这可能是累人的。
使用Servlet FilterServer-Side redirection另一种方法是设置Servlet Filter或某种Server-Side重定向。所以基本上,这将做的是从'/view/'发出请求,并将它们传递到'/rest/view/'。因此,即使您的视图在技术上仍然是从'/rest/view/'提供的,用户也可以通过转到'/view/'来访问它们,如果我理解正确的话,这就是您想要的。

wfsdck30

wfsdck302#

REST资源和ViewBundle共享相同的Servlet,因此/rest前缀将应用于两者。您可以从/view/上的单独servlet上下文提供视图。

ServletContextHandler viewContext = new ServletContextHandler(ServletContextHandler.SESSIONS);
viewContext.setContextPath("/view");

ContextHandlerCollection contexts = new ContextHandlerCollection();
contexts.setHandlers(new Handler[] { jerseyContext, viewContext });

environment.getApplicationContext().getServer().setHandler(contexts);

字符串

ajsxfq5m

ajsxfq5m3#

当然,我明白你的要求!您可以通过自定义Dropwizard的ViewBundle根URL来实现所需的行为。以下是您的操作方法:
首先,确保已将ViewBundle添加到应用程序中。在run方法(或者initialize方法,如果您愿意的话)中,您需要使用自定义URL模式设置ViewBundle。要实现所需的URL结构,您可以为特定视图设置ViewRenderer和ViewConfigurations:

@Override
public void run(YourConfiguration configuration, Environment environment) {
   
    YourViewRenderer yourViewRenderer = new YourViewRenderer();
    environment.jersey().register(yourViewRenderer);

    
    YourViewConfiguration yourViewConfiguration = new YourViewConfiguration();
    environment.jersey().register(yourViewConfiguration);
}

字符串
现在,您可以使用资源类中的@Path注解为视图配置根URL。举例来说:

@Path("/view")
public class YourViewResource {
    // Your resource methods...
}


按照以下步骤操作,您可以轻松地为所有Dropwizard的ViewBundle资源设置根URL。

相关问题