标签: jax-rs

如何捕获RESTEasy Bean验证错误?

我正在使用JBoss-7.1和RESTEasy开发一个简单的RESTFul服务.我有一个名为CustomerService的REST服务,如下所示:

@Path(value="/customers")
@ValidateRequest
class CustomerService
{
  @Path(value="/{id}")
  @GET
  @Produces(MediaType.APPLICATION_XML)
  public Customer getCustomer(@PathParam("id") @Min(value=1) Integer id) 
  {
    Customer customer = null;
    try {
        customer = dao.getCustomer(id);
    } catch (Exception e) {
        e.printStackTrace();
    }
    return customer;
    }
}
Run Code Online (Sandbox Code Playgroud)

当我点击URL http:// localhost:8080/SomeApp/customers/-1时, @ MIN约束将失败并在屏幕上显示堆栈跟踪.

有没有办法捕获这些验证错误,以便我可以准备一个带有正确错误消息的xml响应并显示给用户?

java rest jax-rs resteasy restful-architecture

3
推荐指数
1
解决办法
6349
查看次数

Camel JAX-RS和跨域请求

我希望能够在我的localhost Camel实例上执行HTTP请求(仅用于开发目的,我知道这是不好的做法).现在,我坚持:

 Origin http://localhost:8000 is not allowed by Access-Control-Allow-Origin.
Run Code Online (Sandbox Code Playgroud)

我搜索了如何告诉Camel允许这样的请求,但没有找到答案.我正在使用camel-cxf和rsServer来创建我的端点.

我有一个端点看起来像这样:

public class LoginEndpoint {
    @GET
    @Path(LOGIN)
    @Produces(MediaType.APPLICATION_JSON)
    public Customer login(@QueryParam("email") String email, @QueryParam("password") String password) {
        return null;
    }
}
Run Code Online (Sandbox Code Playgroud)

比标准路线正在做这项工作.

我如何告诉Camel(或JAX-RS或CXFRS组件,我不知道......)允许跨域请求?

cxf jax-rs cross-domain apache-camel cxfrs

3
推荐指数
1
解决办法
3687
查看次数

在JAX-RS的响应中将自定义错误代码返回给客户端

我是JAX-RS的新手并且还在学习它,所以我的问题可能有点幼稚,所以请耐心等待:)

我一直在经历各种SO问题"http响应的错误代码".我发现只要一个人不想迂腐,他就可以在回复中返回4xx状态代码.

我也经历过这个链接RFS 2616也是W3

我想知道是否有任何一般做法可以返回标准HTTP响应状态代码以外的自定义错误代码.

例如,如果在post请求中通过userid获取用户信息,则返回错误,如果userid无效/不存在.在这种情况下,HTTP状态422听起来空闲.但是如果需要详细的错误描述,可以自定义错误,如40xx,其中xx是除了http错误之外的值,返回给客户端.

同样可以定义和返回40xx以响应客户端吗?(在请求中具有正确的语法)

4001 - userid无效

4002 - 帖子ID无效

等等..

或者我应该返回4xx状态代码并在响应正文中添加自己的代码以获取更多错误详细信息?

java rest jax-rs http-status-codes

3
推荐指数
1
解决办法
3689
查看次数

JAX RS 2使用Jersey客户端获取"HTTP 404 Not found"但相同的URL正在浏览器上工作

我是JAX RS和Jersey 2的新手.我的简单休息资源服务器端程序"Hello World"工作正常,我可以通过google chrome的任何浏览器和Advance Rest Client应用程序访问它.

但是当我写了一个JAX RS Jersey 2客户端时,它给了我HTTP 404 Not found,下面是详细信息:

下面是rest资源服务器端程序:

web.xml中:

http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"id ="WebApp_ID"version ="3.0"> ProJrsRi_HelloRest2

<servlet>
    <servlet-name>jersey</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>com</param-value>
    </init-param>
</servlet>
<servlet-mapping>
    <servlet-name>jersey</servlet-name>
    <url-pattern>/rest/*</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)


资源类

package     com;
import     javax.ws.rs.GET;
import     javax.ws.rs.Path;


@Path("hello")
public class HelloRest {

    @GET()
    public  String sayHello(){
    return "Welcome to the world of REST";
    }
}
Run Code Online (Sandbox Code Playgroud)

我的服务器端Jar文件列表

asm-3.1.jar
jackson-core-asl-1.9.2.jar
jackson-jaxrs-1.9.2.jar
jackson-mapper-asl-1.9.2.jar
jackson-xc-1.9.2.jar
jersey-client-1.18.jar
jersey-core-1.18.jar
jersey-json-1.18.jar
jersey-server-1.18.jar
jersey-servlet-1.18.jar
jettison-1.1.jar
Run Code Online (Sandbox Code Playgroud)

它在浏览器中工作正常.

这是客户端:

 package userCoreJava;

 import java.net.URI;
 import java.net.URISyntaxException;

 import javax.ws.rs.client.Client;
 import …
Run Code Online (Sandbox Code Playgroud)

rest client jax-rs jersey

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

如何在JAX-RS中过滤具有无效参数的请求?

"无效"是指不期望的参数.

例如:

@Path("/")
public interface ExampleInterface {
    @GET
    @Path("/example")
    public Response test(
        @QueryParam("param1") String param1,
        @QueryParam("param2") String param2
    );
}
Run Code Online (Sandbox Code Playgroud)

然后我打电话 ".../example?param3=foo"

java jax-rs filter query-parameters resteasy

3
推荐指数
1
解决办法
5214
查看次数

如何禁用CN检查CXF 3.0.0+ jax-rs 2.0客户端

我不知道如何用CXF 3.0.4 JAX-RS 2.0客户端以编程方式禁用CN检查.我的代码如下:

     System.setProperty("jsse.enableSNIExtension", "false"); 
        HttpsURLConnection.setDefaultHostnameVerifier( 
        new HostnameVerifier(){ 

            public boolean verify(String hostname, 
                    SSLSession sslSession) { 

                    return true; 
            
            } 
        }); 
            Client client = ClientBuilderImpl.newClient(); 
            String urlHost = "https://" + centralNode; 
            WebTarget target = client.target(urlHost).path(BASE_SERVICE_URL); 
            String encodedpw = Base64.encodeBase64String(passwd.getBytes()); 
            String body = "{\"uid\" : \"" + uid + "\",\"password\": \"" + encodedpw + "\"}"; 
            Response res = target.request(MediaType.APPLICATION_JSON).post(Entity.entity(body, MediaType.APPLICATION_JSON)); 
Run Code Online (Sandbox Code Playgroud)

如您所见,我已经尝试覆盖默认的hostnameverifier,并将jsse.enableSNIExtension设置为false.这些都不起作用,我仍然得到例外:

"https URL主机名与客户端信任库中服务器证书上的公用名(CN)不匹配.确保服务器证书正确,或禁用此检查(不建议用于生产)设置CXF客户端TLS配置属性"disableCNCheck "为了真实."

请帮忙!

cruisecontrol.net ssl cxf certificate jax-rs

3
推荐指数
1
解决办法
5038
查看次数

Dropwizard和协议缓冲区示例

请注意:尽管这个问题特别提到了Dropwizard,但我相信任何具有Jersey / JAX-RS经验的人都应该能够回答这个问题,因为我认为Dropwizard只是遵循了Jersey / JAX-RS的惯例。


我有一个Dropwizard服务,该服务以JSON 进行改写 /编写,并且效果很好。

我现在想将其切换为读/写二进制数据(以最小化网络带宽)。我看到有Dropwizard-Protobuf库,但是我对在Dropwizard中实现二进制序列化有一些担忧。

首先,这是我当前(以JSON为中心)代码中的重要内容:

// Groovy pseudo-code

// Domain entity/POJO
@JsonIgnoreProperties(ignoreUnknown = true)
@JsonInclude(JsonInclude.Include.NON_NULL)
class Fizz {
    @JsonProperty
    String name

    @JsonProperty
    boolean isBuzz    
}

// The Dropwizard app entry point
class FizzService extends Application<FizzConfiguration> {
    @Override
    void run(FizzConfiguration fizzCfg, Environment env) throws Exception {
        // ... lots of stuff

        env.jersey().register(new FizzService())
    }
}

// JAX-RS resource with a sample GET endpoint
@Path(value = "/fizz")
@Produces(MediaType.APPLICATION_JSON)
class …
Run Code Online (Sandbox Code Playgroud)

jax-rs jersey protocol-buffers binary-serialization dropwizard

3
推荐指数
1
解决办法
1714
查看次数

JAX-RS/Jersey路径参数regex用于简单字符串

我正在尝试匹配字符串v1v2.为此,我正在尝试以下正则表达式:( ^v(1|2)我也尝试过,$这可能是我需要的).当我在http://www.regextester.com/上测试它时,似乎工作正常.但是当我在JAX-RS路径表达式中使用它时,它不起作用.我使用的表达式如下:

@Path("/blah/{ver:^v(1|2)}/ep")

JAX-RS是否有任何我特有的缺失?

java regex jax-rs jersey

3
推荐指数
1
解决办法
3816
查看次数

与泽西岛的多线程

以下两个链接似乎相互矛盾.我很快就会信任这些文档:

链接1

默认情况下,服务器上的请求处理在同步处理模式下有效

链接2

它已经是多线程的.

我的问题:

哪个是对的.可以同步和多线程吗?

为什么文档会说以下内容?:

如果已知资源方法执行需要很长时间来计算结果,则应使用服务器端异步处理模型

如果文档是正确的,为什么默认操作是同步的?对于用户体验,默认情况下,所有请求在客户端javascript上都是异步的,因此服务器端的默认操作也应该是异步的.

如果客户端不需要按特定顺序提供请求,那么谁在乎操作的"昂贵".不应该所有操作都只是异步吗?

java multithreading asynchronous jax-rs jersey

3
推荐指数
1
解决办法
4552
查看次数

如何在Payara 5中使用Jackson 2?

我正在将Jackson 2与Payara 4一起使用,并且我想在Payara 5中使用Jackson 2

使用JAX-RS,我还希望避免更改注释等。

在Payara 5中,默认的Jsonb提供程序是Yasson。有禁用它并使用Jackson的想法吗?欢迎所有评论/想法:-)

注意: Yasson非常有趣,但是处理抽象类或接口的序列化/反序列化要比放置Jackson注释复杂得多。我目前的理解是,它需要实现JsonbSerializer / Deserializer,但实际上只能在字段/方法上使用序列化器/反序列化器(对于类开放一个问题,这将非常有帮助)。无论如何,迁移到Yasson意味着将根据需要实现许多序列化器/反序列化器(对于实体以及当然是集合),但是我想这很困难。

jax-rs jsonb payara payara-micro jackson2

3
推荐指数
1
解决办法
1322
查看次数