【问题标题】:Where should you place the class that extend Application in jax.rs您应该将扩展 Application 的类放在 jax.rs 中的哪个位置
【发布时间】:2015-02-12 06:01:23
【问题描述】:

下面的代码是我在 netbeans 中创建的新项目,但我使用了 MAVEN 作为项目类型。因为我想创建一个像下面这样的文件夹结构

+ com.kixortillan.mavenproject1
---+com.kixortillan.mavenproject1.controllers
---+com.kixortillan.mavenproject1.models

我不知道将扩展应用程序的类放在哪里。我尝试将其放入 com.kixortillan.mavenproject1 和 com.kixortillan.mavenproject1.controllers 中的测试控制器,但它显示错误 404

我拨打的网址是http://localhost:8080/mavenproject1/services/test

ApplicationConfig 类

package com.kixortillan.mavenproject1;

import java.util.Set;
import java.util.HashSet;
import javax.ws.rs.core.Application;

@javax.ws.rs.ApplicationPath("services")
public class ApplicationConfig extends Application
{
    @Override
    public Set<Class<?>> getClasses() {
        Set<Class<?>> s = new HashSet<Class<?>>();
        s.add(com.kixortillan.mavenproject1.controllers.TestResource.class);
        return s;
    }
}

测试控制器

package com.kixortillan.mavenproject1.controllers;

import javax.ws.rs.core.Context;
import javax.ws.rs.core.UriInfo;
import javax.ws.rs.PathParam;
import javax.ws.rs.Consumes;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.GET;
import javax.ws.rs.Produces;

/**
 * REST Web Service
 *
 * @author NOC
 */
@Path("test")
public class TestResource
{

    @Context
    private UriInfo context;

    /**
     * Creates a new instance of TestResource
     */
    public TestResource()
    {
    }

    /**
     * Retrieves representation of an instance of com.kixortillan.mavenproject1.controllers.TestResource
     * @return an instance of java.lang.String
     */
    @GET
    @Produces("application/xml")
    public String getXml()
    {
        //TODO return proper representation object
        throw new UnsupportedOperationException();
    }

    /**
     * PUT method for updating or creating an instance of TestResource
     * @param content representation for the resource
     * @return an HTTP response with content of the updated or created resource.
     */
    @PUT
    @Consumes("application/xml")
    public void putXml(String content)
    {
    }
}

非常感谢您能给我一个关于 jax.rs 工作原理的详细教程

【问题讨论】:

  • “我不能让它工作”是什么意思?您是否收到错误/异常?单独的类看起来不错。其目的是以编程方式配置 JAX-RS 应用程序。有了这个,你就不需要任何 web.xml
  • 您能详细说明错误吗?您使用什么 URL 来访问 Web 服务?此外,继承的类可用于指定要公开为 REST 服务的类。否则,JAX RS 运行时将扫描类路径。
  • 我已经编辑了这个问题。很抱歉让您感到困惑。
  • 这样做。创建新项目 -> Maven -> Project From Archetype -> 搜索“jersey-quickstart-webapp” -> 选择 grizzly (不是 sun) -> 为项目命名。结果应该是一个可以从像 TomCat 这样的 servlet 容器运行的 webapp
  • 您会注意到该应用使用了web.xml。这是用来代替Application 子类的。您可以使用您的 Application 子类并摆脱 web.xml ,它应该仍然可以工作。

标签: java web-services rest maven


【解决方案1】:

你需要确保你在 pom.xml 中有这个

<dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.0.1</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.glassfish.jersey.containers</groupId>
        <artifactId>jersey-container-servlet</artifactId>
    </dependency>

【讨论】:

    猜你喜欢
    • 2020-04-25
    • 1970-01-01
    • 1970-01-01
    • 2011-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多