GVKun编程网logo

是否可以定义一个与实现(使用eclipse和jersey分离)的jax-rs服务接口?(可否定义一个接口变量)

35

如果您对是否可以定义一个与实现感兴趣,那么本文将是一篇不错的选择,我们将为您详在本文中,您将会了解到关于是否可以定义一个与实现的详细内容,我们还将为您解答使用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服务接口?(可否定义一个接口变量)

是否可以定义一个与实现(使用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 – 是否可以定义一个指向引用的指针?

c – 是否可以定义一个指向引用的指针?

我正在阅读C Primer,我注意到有一个声明说:

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 中编写服务接口导入出错

在 eclipse 中编写服务接口时 import javax.jws.WebService 显示 “Syntax error on token "Invalid Character", delete this...”

Java JAX-RS / Jersey如何自定义错误处理?

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的错误处理行为。这是三种更简单的方法。

第一种方法是创建一个扩展WebApplicationExceptionException类。

例:

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实现

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实现等相关知识,可以在本站进行查询。

本文标签: