Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用ResourceConfig而不使用web.xml的Jersey应用程序的URL_Java_Jersey_Tomcat7 - Fatal编程技术网

Java 使用ResourceConfig而不使用web.xml的Jersey应用程序的URL

Java 使用ResourceConfig而不使用web.xml的Jersey应用程序的URL,java,jersey,tomcat7,Java,Jersey,Tomcat7,我使用带有Jersey 2.7的ResourceConfig并部署在Tomcat 7上,从web.xml迁移到完全Java配置。之后,我再也无法通过使用与web.xml方法相同的URL访问服务。我不明白ResourceConfig是如何影响路径的 我以前的web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xml

我使用带有Jersey 2.7的ResourceConfig并部署在Tomcat 7上,从web.xml迁移到完全Java配置。之后,我再也无法通过使用与web.xml方法相同的URL访问服务。我不明白ResourceConfig是如何影响路径的

我以前的web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"    
version="3.0">
<servlet>
    <servlet-name>my.app</servlet-name>
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
    <init-param>
        <param-name>jersey.config.server.provider.packages</param-name>
        <param-value>com.mypackage.resource,com.mypackage.providers</param-value>
    </init-param>
    <init-param>
        <param-name>jersey.config.server.provider.scanning.recursive</param-name>
        <param-value>true</param-value>
    </init-param>
    <init-param>
        <param-name>jersey.config.server.provider.classnames</param-name>
        <param-value>org.glassfish.jersey.filter.LoggingFilter</param-value>        
    </init-param>
    <init-param>
        <param-name>org.glassfish.jersey.server.ServerProperties.BV_SEND_ERROR_IN_RESPONSE</param-name>
        <param-value>true</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>my.app</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>
我的资源之一是:

FlagResource.java

@Path("my-resource")
public class FlagResource {
private MyService myService = new MyService();

@GET
@Produces(MediaType.APPLICATION_JSON)
public FlagResource getFlagResource(@NotNull @QueryParam("level") Long level) {
    FlagResource flagResource = myService.getFlagResource(level);
    return flagResource;
}
}

我正在生成的战争称为:my.app.war

Tomcat像往常一样从war文件的名称中获取web上下文根路径,但我不知道在使用基于Java代码的配置时这是否会改变

GET http://localhost:8080/my.app/my-resource?level=1

返回一个404

实际上,我通过添加“/”作为@ApplicationPath注释的值来解决这个问题,我认为这是不必要的,因为API文档中对@ApplicationPath value param说了以下内容:

Defines the base URI for all resource URIs. A trailing '/' character will be automatically appended if one is not present.
我假设保留空字符串等同于使用@ApplicationPath(“/”),但事实并非如此

这就是配置类现在的样子:

@ApplicationPath("/")
public class MyRESTAPIApp extends ResourceConfig{
    public MyRESTAPIApp () {
        packages("com.mypackage.resource", "com.mypackage.providers");
        register(org.glassfish.jersey.filter.LoggingFilter.class);
        property("jersey.config.beanValidation.enableOutputValidationErrorEntity.server", "true");
    }
}
@ApplicationPath("/")
public class MyRESTAPIApp extends ResourceConfig{
    public MyRESTAPIApp () {
        packages("com.mypackage.resource", "com.mypackage.providers");
        register(org.glassfish.jersey.filter.LoggingFilter.class);
        property("jersey.config.beanValidation.enableOutputValidationErrorEntity.server", "true");
    }
}