如果您对是否可以定义一个与实现感兴趣,那么本文将是一篇不错的选择,我们将为您详在本文中,您将会了解到关于是否可以定义一个与实现的详细内容,我们还将为您解答使用eclipse和jersey分离的jax-
如果您对是否可以定义一个与实现感兴趣,那么本文将是一篇不错的选择,我们将为您详在本文中,您将会了解到关于是否可以定义一个与实现的详细内容,我们还将为您解答使用eclipse和jersey分离的jax-rs服务接口?的相关问题,并且为您提供关于c – 是否可以定义一个指向引用的指针?、eclipse 中编写服务接口导入出错、Java JAX-RS / Jersey如何自定义错误处理?、Java RestFull Web服务:带有Jersey 2.3.1库的JAX-RS实现的有价值信息。
本文目录一览:- 是否可以定义一个与实现(使用eclipse和jersey分离)的jax-rs服务接口?(可否定义一个接口变量)
- c – 是否可以定义一个指向引用的指针?
- eclipse 中编写服务接口导入出错
- Java JAX-RS / Jersey如何自定义错误处理?
- Java RestFull Web服务:带有Jersey 2.3.1库的JAX-RS实现
是否可以定义一个与实现(使用eclipse和jersey分离)的jax-rs服务接口?(可否定义一个接口变量)
我不知道标题是否令人困惑,但可以说我有这个界面:
@Produces(MediaType.APPLICATION_JSON)@Path("/user")public interface UserService { @GET @Path("/{userId}") public Response getUser(@PathParam("userId") Long userId);}
为什么当我尝试实现版本时,Eclipse为重写的方法而不是为类重写注解?
class UserServiceImpl implements UserService { @Override @GET @Path("/{userId}") public Response getUser(@PathParam("userId") Long userId) { // TODO Auto-generated method stub return null; }}
我试图为静态Web服务创建一个标准定义,然后使用不同的实现。使用标准jax-rs可能会发生这种情况吗?我是否会使用错误的注释?
答案1
小编典典只有在实现类上不使用 任何 jax-rs
注释时,才可以使用注释继承:JSR-339的3.6节对此进行了说明。
您重新定义,@Path
并@Produces
为方法重新定义,但不为类重新定义 。
因此,Path
代码中的注释应该在具体的类上:
public interface UserService { @GET @Path("/{userId}") @Produces(MediaType.APPLICATION_JSON) public Response getUser(@PathParam("userId") Long userId);}@Path("/user")class UserServiceImpl implements UserService { @Override @GET @Path("/{userId}") @Produces(MediaType.APPLICATION_JSON) public Response getUser(@PathParam("userId") Long userId) { // TODO Auto-generated method stub return null; }}
顺便说一句,规范鼓励我们在具体的类上复制注释:
为了与其他Java EE规范保持一致,建议始终重复注释,而不要依赖注释继承。
c – 是否可以定义一个指向引用的指针?
Because references are not objects,they don’t have addresses. Hence,
we may not define a pointer to a reference.
但是我刚刚写了一个示例代码,并且显示可以创建一个指向引用(d变量)的指针.
代码如下:
#include <iostream>using namespace std;int main(){ int a = 1024; int &b = a; // a reference to int int &c = b; // a reference to another reference int *d = &b; // a pointer to a reference int *(&e) = d; // a reference to a pointer a = 100; cout << b << endl; cout << c << endl; cout << *d << endl; cout << *e << endl;}
那么,我的测试有什么问题吗?或者C Primer中的声明是错误的?
我正在读C Primerfifth版.声明在第52页,2.3.2.
解决方法
#include <stdio.h>#include <stdlib.h>int main() { int a = 0; // two references referring to same object int& ref1_a = a; int& ref2_a = a; // creating a different pointer for each reference int* ptr_to_ref1 = &ref1_a; int* ptr_to_ref2 = &ref2_a; printf("org: %p 1: %p 2: %p\n",&a,ptr_to_ref1,ptr_to_ref2); return 0;}
输出:
org: 0x7fff083c917c 1: 0x7fff083c917c 2: 0x7fff083c917c
如果你说你能够指出一个参考,那上面的输出应该是不一样的.
eclipse 中编写服务接口导入出错
在 eclipse 中编写服务接口时 import javax.jws.WebService 显示 “Syntax error on token "Invalid Character", delete this...”
Java JAX-RS / Jersey如何自定义错误处理?
我正在使用Jersey来学习JAX-RS(又名JSR-311)。我已经成功创建了一个根资源,并且正在使用参数:
@Path("/hello")public class HelloWorldResource { @GET @Produces("text/html") public String get( @QueryParam("name") String name, @QueryParam("birthDate") Date birthDate) { // Return a greeting with the name and age }}
这很好用,并且可以处理Date(String)构造函数可以理解的当前语言环境中的任何格式(例如YYYY / mm / dd和mm / dd / YYYY)。但是,如果提供的值无效或无法理解,则会收到404响应。
例如:
GET /hello?name=Mark&birthDate=X404 Not Found
如何自定义此行为?也许是不同的响应代码(可能是“ 400 Bad Request”)?记录错误该怎么办?也许在自定义标题中添加问题描述(“错误日期格式”)以帮助进行故障排除?还是返回带有详细信息的完整错误响应以及5xx状态代码?
答案1
小编典典有几种方法可以自定义JAX-RS的错误处理行为。这是三种更简单的方法。
第一种方法是创建一个扩展WebApplicationException
的Exception
类。
例:
public class NotAuthorizedException extends WebApplicationException { public NotAuthorizedException(String message) { super(Response.status(Response.Status.UNAUTHORIZED) .entity(message).type(MediaType.TEXT_PLAIN).build()); }}
并抛出此新创建的异常,你只需:
@Path("accounts/{accountId}/") public Item getItem(@PathParam("accountId") String accountId) { // An unauthorized user tries to enter throw new NotAuthorizedException("You Don''t Have Permission");}
注意,你不需要在throws子句中声明异常,因为WebApplicationException是运行时异常。这将向客户端返回401响应。
第二种更简单的方法是WebApplicationException
直接在代码中直接构造实例 。只要你不必实现自己的应用程序异常,这种方法就行。
例:
@Path("accounts/{accountId}/")public Item getItem(@PathParam("accountId") String accountId) { // An unauthorized user tries to enter throw new WebApplicationException(Response.Status.UNAUTHORIZED);}
此代码也向客户端返回401。
当然,这只是一个简单的例子。如果需要,可以使Exception更为复杂,并且可以生成所需的http响应代码。
另一种方法是包装现有的Exception
,可能是ObjectNotFoundException
使用小型包装器类来包装,该类实现ExceptionMapper
带有@Provider
注释的接口。这告诉JAX-RS
运行时,如果引发了包装的Exception
,则返回中定义的响应代码ExceptionMapper
。
Java RestFull Web服务:带有Jersey 2.3.1库的JAX-RS实现
我正在尝试在JBoss jboss-eap-6.1 AS上运行一个简单的“ Hallo World”应用程序Jersey 2.3.1
REST服务。在web.xml中,我禁用了restEasy库。部署期间出现错误:
JBWEB000289:Servlet
com.sun.jersey.samples.helloworld.resources.MyApplication抛出load()异常:java.lang.NoSuchMethodError:javax.ws.rs.core.Application.getProperties()Ljava
/ util / Map;
在POM中,我将这些依赖项放入:
<dependency>
<groupId>org.glassfish.jersey.core</groupId>
<artifactId>jersey-server</artifactId>
<version>2.3.1</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-servlet-core</artifactId>
<version>2.3.1</version>
</dependency>
<dependency>
<groupId>javax.ws.rs</groupId>
<artifactId>javax.ws.rs-api</artifactId>
<version>2.0</version>
</dependency>
这是我的web.xml,其中的restEasy标签被禁用:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<servlet>
<servlet-name>com.sun.jersey.samples.helloworld.resources.MyApplication</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>javax.ws.rs.Application</param-name>
<param-value>com.sun.jersey.samples.helloworld.resources.MyApplication</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<context-param>
<param-name>resteasy.scan</param-name>
<param-value>false</param-value>
</context-param>
<context-param>
<param-name>resteasy.scan.providers</param-name>
<param-value>false</param-value>
</context-param>
<context-param>
<param-name>resteasy.scan.resources</param-name>
<param-value>false</param-value>
</context-param>
<servlet-mapping>
<servlet-name>com.sun.jersey.samples.helloworld.resources.MyApplication</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
</web-app>
而我的资源配置java类:
package com.sun.jersey.samples.helloworld.resources;
import org.glassfish.jersey.server.ResourceConfig;
public class MyApplication extends ResourceConfig {
public MyApplication() {
packages("com.sun.jersey.samples.helloworld.resources");
//super(HelloWorldResource.class);
}
}
有人有解决的办法吗?在此先感谢Roberto
今天关于是否可以定义一个与实现和使用eclipse和jersey分离的jax-rs服务接口?的分享就到这里,希望大家有所收获,若想了解更多关于c – 是否可以定义一个指向引用的指针?、eclipse 中编写服务接口导入出错、Java JAX-RS / Jersey如何自定义错误处理?、Java RestFull Web服务:带有Jersey 2.3.1库的JAX-RS实现等相关知识,可以在本站进行查询。
本文标签: