我正在尝试使用 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) 我正在使用 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 上找到的示例通常会将其粘贴 …
我有以下 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)
我在控制器类中定义了一个 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
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 …
我希望能够添加一个请求范围的属性(一个 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 的大量多余开销的情况下实现这一点?
为了在进行 REST 调用时设置超时,我们应该同时指定这两个参数,但我不确定为什么这两个参数以及它们的用途究竟有何不同。另外,如果我们只设置其中一个或两个具有不同的值怎么办?
Weblogic 12.2.1 内部有 Jersey 2.21.1 作为 JAX-RS 2.0 的实现,但我们想使用 Jersey 2.5.1 或最新版本的 Jersey。
解决冲突的一般方法是在配置文件中定义类以从应用程序加载类。
但是当你升级weblogic或者Jersey的时候,你要查看类冲突,修改配置,有没有什么方便的方法可以从weblogic中禁用Jersey呢?
我已经使用 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) 我想用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被提及.我怎么用呢?如果有关于如何完成任务的好例子,请与我分享.
jax-rs ×10
java ×5
jersey-2.0 ×5
jackson ×3
json ×3
rest ×3
jersey ×2
web-services ×2
jakarta-ee ×1
jax-ws ×1
jaxb ×1
resteasy ×1
servlets ×1
tomcat ×1
weblogic12c ×1