标签: jax-rs

HTTP 状态 500 - servlet jersey-serlvet 的 Servlet.init() 抛出异常?

我正在尝试使用 Jersey 和 Maven 和 Tomcat 创建一个 Web 服务 RESTFUL。当我执行我的网络服务时,会抛出一些异常并且不起作用。

我怎么能解决呢?

网址

http://localhost:8080/FerpaWS/ws/cliente

服务

package br.com.ferpa.ws;

import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import org.json.JSONObject;

@Path("/")
public class Cliente {

    @GET
    @Path("/cliente")
    @Consumes(MediaType.APPLICATION_JSON)
    public Response getNome(){
       JSONObject obj = new JSONObject();
       obj.put("nome", "fernando paiva");
       return Response.status(200).entity(obj.toString()).build();
    }    
}
Run Code Online (Sandbox Code Playgroud)

网页.xml

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
     version="3.1">

    <display-name>FerpaWS</display-name>
    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>index.jsp</welcome-file>
        <welcome-file>default.html</welcome-file>
        <welcome-file>default.htm</welcome-file>
        <welcome-file>default.jsp</welcome-file>
    </welcome-file-list>

    <servlet>
        <servlet-name>jersey-serlvet</servlet-name>
        <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
        <init-param>
             <param-name>com.sun.jersey.config.property.packages</param-name>
             <param-value>br.com.ferpa.ws</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>jersey-serlvet</servlet-name>
        <url-pattern>/ws/*</url-pattern>
    </servlet-mapping> …
Run Code Online (Sandbox Code Playgroud)

java tomcat servlets jax-rs jersey

4
推荐指数
2
解决办法
4万
查看次数

在 Jax-RS 应用程序中注册 JodaModule

我正在使用 Jersey 和 Jackson2 编写一个 Jax-RS 应用程序,以促进 JSON i/o。该服务本身运行良好,但我想通过让 Jackson 映射器自动将日期和日期时间序列化/反序列化为 JodaTime 对象来改进它。

我正在关注此处的文档并添加了相关的 jars,但我对这条指令迷失了:

Registering module

To use Joda datatypes with Jackson, you will first need to register the module first (same as with all Jackson datatype modules):

ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(new JodaModule());
Run Code Online (Sandbox Code Playgroud)

我尝试在扩展 jax.ws.rs.core.Application 的自定义类中执行此操作,但我对该解决方案完全没有信心。我目前收到此错误:

Can not instantiate value of type [simple type, class org.joda.time.DateTime] from String value ('2014-10-22'); no single-String constructor/factory method
 at [Source: org.glassfish.jersey.message.internal.ReaderInterceptorExecutor$UnCloseableInputStream@3471b6d5; line: 7, column: 25]
Run Code Online (Sandbox Code Playgroud)

除了这个模块注册需要在应用程序(servlet?)启动时发生的一般印象之外,我不知道如何处理这些信息。我是否需要用特别的东西来注释自定义类才能让它被选中?我应该扩展一些课程吗?

我在 StackOverflow 上找到的示例通常会将其粘贴 …

jax-rs jackson jersey-2.0 jackson-modules

4
推荐指数
1
解决办法
2270
查看次数

post方法没有得到payload对象

我有以下 POJO:

public class Order {

    private String orderCode;

    // And many more ... getters and setter

}
Run Code Online (Sandbox Code Playgroud)

以及以下 REST 资源:

@Path("/customers/{customercode}/orders")
public class OrderResource {

    @POST
    @Consumes(MediaType.APPLICATION_JSON)
    public Response create(@PathParam("customercode") String customerCode, Order order) {
        // ...
    }

    // ...
}
Run Code Online (Sandbox Code Playgroud)

现在一些客户端将一个Order对象作为 JSON发送到这个 URL。该customerCode参数获取设置为预期值,但order参数是null,虽然这里是一个有效的JSON体的请求。(我可以在ContainerRequestContext对象中看到它。)

Jersey 的日志没有说明任何问题(即使在调试模式下)。

有任何想法吗?蒂亚!(我正在与 Jackson 一起使用 Jersey 2)

java rest json jax-rs jersey-2.0

4
推荐指数
1
解决办法
947
查看次数

带有 application/json 和 BeanParam 的 POJO 中的空字段

我在控制器类中定义了一个 REST 服务操作,如图所示:

@POST
@Consumes({MediaType.APPLICATION_JSON})
@Path("create")
public Response createWidget(@BeanParam Widget widget) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

Widget 是一个 POJO bean 类,即 2 个名为foo&bar类型的私有字段,String带有公共 getter 和 setter,以及一个公共无参数构造函数。

POST 请求正文是:

{ "foo": "Some text", "bar": "Some more text" }
Run Code Online (Sandbox Code Playgroud)

并有标题 Content-Type: application/json

在触发此请求时,该createWidget方法获取一个Widget对象作为参数,但两个String字段都是null.

有人可以告诉我填充字段还需要什么吗?我认为在 POJO bean 类中可能需要一些注释。如果内容类型是application/x-www-form-urlencoded,那么我知道应该对字段进行注释@FormParam,但我不确定内容的注释应该是什么application/json

非常感谢您的帮助... - Ajoy

rest json jax-rs json-deserialization

4
推荐指数
1
解决办法
1800
查看次数

JAX-RS/Jackson -- Deserialize JSON with Unknown Root Element Name?

I am writing a RESTeasy Proxy Client to consume Apple's API for retrieving their iTunes category list. When you query for information about a given category , for example with this URL:

https://itunes.apple.com/WebObjects/MZStoreServices.woa/ws/genres?id=1420
Run Code Online (Sandbox Code Playgroud)

...you get a JSON response that looks like this:

{  
   "1420":{  
      "name":"Self-Help",
      "id":"1420",
      "url":"https://itunes.apple.com/us/genre/podcasts-health-self-help/id1420?mt=2",
      "rssUrls":{  
         "topVideoPodcastEpisodes":"https://itunes.apple.com/us/rss/topvideopodcastepisodes/genre=1420/json",
         "topAudioPodcasts":"https://itunes.apple.com/us/rss/topaudiopodcasts/genre=1420/json",
         "topVideoPodcasts":"https://itunes.apple.com/us/rss/topvideopodcasts/genre=1420/json",
         "topPodcasts":"https://itunes.apple.com/us/rss/toppodcasts/genre=1420/json",
         "topAudioPodcastEpisodes":"https://itunes.apple.com/us/rss/topaudiopodcastepisodes/genre=1420/json",
         "topPodcastEpisodes":"https://itunes.apple.com/us/rss/toppodcastepisodes/genre=1420/json"
      },
      "chartUrls":{  
         "videoPodcastEpisodes":"https://itunes.apple.com/WebObjects/MZStoreServices.woa/ws/charts?cc=us&g=1420&name=VideoPodcastEpisodes",
         "podcasts":"https://itunes.apple.com/WebObjects/MZStoreServices.woa/ws/charts?cc=us&g=1420&name=Podcasts",
         "audioPodcastEpisodes":"https://itunes.apple.com/WebObjects/MZStoreServices.woa/ws/charts?cc=us&g=1420&name=AudioPodcastEpisodes",
         "audioPodcasts":"https://itunes.apple.com/WebObjects/MZStoreServices.woa/ws/charts?cc=us&g=1420&name=AudioPodcasts",
         "podcastEpisodes":"https://itunes.apple.com/WebObjects/MZStoreServices.woa/ws/charts?cc=us&g=1420&name=PodcastEpisodes",
         "videoPodcasts":"https://itunes.apple.com/WebObjects/MZStoreServices.woa/ws/charts?cc=us&g=1420&name=VideoPodcasts"
      }
   }
}
Run Code Online (Sandbox Code Playgroud)

I am trying to map this JSON response to a Java object using JAXB and …

json jax-rs jaxb resteasy jackson

4
推荐指数
1
解决办法
1994
查看次数

以每个请求、线程安全的方式设置 Jackson DeserializationContext 属性

我希望能够添加一个请求范围的属性(一个 JAX-RS,ContainerRequestContext因为我宁愿使用 Jackson 将我的参数转换为对象,而不是 JAX-RS 的构思和笨拙ParameterConverterProviders)到 aDeserializationContext以便它可以从内部获取一个JsonDeserializer。我必须调用convertValue()而不是简单地readValue()(不处理实际的 JSON),所以我无法ObjectReader在每个线程中创建一个,除非我愿意先将我的映射序列化为一个 JSON 字符串,然后再读回来 - 这将是非常低效的。

我希望能够以按请求的方式完成以下任务:

ObjectMapper om = new ObjectMapper();

//in request-scoped context:
om.getDeserializationContext().setAttribute("requestContext",containerRequestContext)
Map<String,Object> mapOfRequestParameters = ...

BeanOfVastImportance bean = om.convertValue(mapOfRequestParameters,BeanOfVastImportance.class)
Run Code Online (Sandbox Code Playgroud)

如何在不需要为每个单独的请求线程创建新的 ObjectMapper 的大量多余开销的情况下实现这一点?

web-services jax-rs thread-safety jackson jersey-2.0

4
推荐指数
1
解决办法
1414
查看次数

RESTful:Jersey 中的 ClientProperties.CONNECT_TIMEOUT 和 ClientProperties.READ_TIMEOUT 有什么区别?

为了在进行 REST 调用时设置超时,我们应该同时指定这两个参数,但我不确定为什么这两个参数以及它们的用途究竟有何不同。另外,如果我们只设置其中一个或两个具有不同的值怎么办?

java jax-rs jax-ws jersey-client jersey-2.0

4
推荐指数
1
解决办法
3179
查看次数

如何从 weblogic 12.2.1 禁用 Jersey

Weblogic 12.2.1 内部有 Jersey 2.21.1 作为 JAX-RS 2.0 的实现,但我们想使用 Jersey 2.5.1 或最新版本的 Jersey。

解决冲突的一般方法是在配置文件中定义类以从应用程序加载类。

但是当你升级weblogic或者Jersey的时候,你要查看类冲突,修改配置,有没有什么方便的方法可以从weblogic中禁用Jersey呢?

jax-rs weblogic12c jersey-2.0

4
推荐指数
1
解决办法
7877
查看次数

JAX-RS 依赖注入

我已经使用 Spring Rest 完成了项目。现在我们有一个小的休息项目,并计划使用 Jersey JAX-RS。我是新手,并参考了 SO 和其他博客以成功实现具有依赖项注入的 Rest api。

有以下代码。

应用程序配置文件

import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;

@ApplicationPath("/")
public class AppConfig extends Application {    
    @Override
    public Set<Class<?>> getClasses() {
        System.out.println("AppConfig");
        final Set<Class<?>> s = new HashSet<Class<?>>();
        s.add(Controller.class);
        s.add(AppFeature.class);
        return s;
    }
}
Run Code Online (Sandbox Code Playgroud)

应用程序绑定器

import org.glassfish.hk2.utilities.binding.AbstractBinder;

public class AppBinder extends AbstractBinder {
    @Override
    protected void configure() {
        System.out.println("AppBinder");
        bind(ReflectionService.class).to(ReflectionService.class);
    }
}
Run Code Online (Sandbox Code Playgroud)

应用功能.java

import javax.ws.rs.core.Feature;
import javax.ws.rs.core.FeatureContext;

public class AppFeature implements Feature {
    @Override
    public boolean configure(FeatureContext context) {
        System.out.println("AppFeature");
        context.register(new AppBinder());
        return …
Run Code Online (Sandbox Code Playgroud)

java dependency-injection jax-rs jersey jakarta-ee

4
推荐指数
1
解决办法
8582
查看次数

如何在Java SE环境中部署JAX-RS应用程序?

我想用JAX-RS编写RESTful Web服务,我想在localhost上发布它http://localhost:[port].我在这个答案中读到以下内容:

Java SE 7(JSR 336)和Java SE 8(JSR 337)规范未包含JAX-RS组件.但是,JAX-RS应用程序可以在Java SE环境中发布(使用RuntimeDelegate),JAX-RS实现也可以通过JAX-WS支持发布.

RuntimeDelegate被提及.我怎么用呢?如果有关于如何完成任务的好例子,请与我分享.

java rest web-services jax-rs

4
推荐指数
1
解决办法
2875
查看次数