【问题标题】:How do i catch bad URL requests using REST easy如何使用 REST 轻松捕获错误的 URL 请求
【发布时间】:2017-02-19 04:08:55
【问题描述】:

我在 "/rest/role/"whatever" 下有几个端点

我如何捕获错误请求,例如“rest/role/dbbhwbhb/wdwdwed”

如果我使用:

    @GET
    @Path("/{param}")
    @Produces(MediaType.TEXT_PLAIN)
    public Response badURLS() {
        return Response.ok().entity("bad url").build();
    }

这会捕获 rest/roles/dfsdfsds 但仍然没有捕获 rest/roles/sdsasd/asdad。如何设置一个方法,以便如果没有命中我的端点然后返回默认消息?

【问题讨论】:

  • 嗯,你是说 404 吗?我很确定 JBoss 会为您处理。
  • 它适用于完全不正确的 url,尽管如果我的一个类有 /role 路径,那么一个方法有 /{id} 路径,那么 role/1 将运行给定的方法,就像我使用role/hello/bla /bla 那么这不会被捕获并抛出异常

标签: java jboss jax-rs resteasy


【解决方案1】:

JBoss 方法

RESTeasy 方法

编辑

正如我之前发送给您的 - 第二个链接可以解决问题。

鉴于这样写的映射器和结构:

package atata;

import javax.ws.rs.NotFoundException;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import javax.ws.rs.ext.ExceptionMapper;
import javax.ws.rs.ext.Provider;

@Provider
public class _404Handler implements ExceptionMapper<NotFoundException> {

    public Response toResponse(NotFoundException exception) {
        return Response.status(500).entity(new ResponseEntity(333, "Got 404.")).type(MediaType.APPLICATION_JSON).build();
    }

}

配置

package atata;

import java.util.HashSet;
import java.util.Set;

import javax.ws.rs.core.Application;


public class EmployeeApplication extends Application {

    private Set<Object> singletons = new HashSet<Object>();

    public EmployeeApplication() {
        singletons.add(new MessageRestService());
        singletons.add(new _404Handler());
    }

    @Override
    public Set<Object> getSingletons() {
        return singletons;
    }

}

波姆:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>io.atata</groupId>
    <artifactId>atata</artifactId>
    <packaging>war</packaging>
    <version>1.0</version>
    <name>atata Maven Webapp</name>
    <url>http://maven.apache.org</url>
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.jboss.resteasy/resteasy-jaxrs -->
        <dependency>
            <groupId>org.jboss.resteasy</groupId>
            <artifactId>resteasy-jaxrs</artifactId>
            <version>3.0.19.Final</version>
        </dependency>
        <dependency>
            <groupId>org.jboss.resteasy</groupId>
            <artifactId>resteasy-servlet-initializer</artifactId>
            <version>3.0.4.Final</version>
        </dependency>
        <dependency>
            <groupId>org.jboss.resteasy</groupId>
            <artifactId>resteasy-jackson-provider</artifactId>
            <version>3.0.14.Final</version>
        </dependency>
    </dependencies>
    <build>
        <finalName>atata</finalName>
    </build>

端点:

包装数据;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;

@Path("/roles")
public class MessageRestService {

    @GET
    @Path("/1")
    @Produces(MediaType.APPLICATION_JSON)
    public Response badURLS() {
        return Response.ok().entity("OK").build();
    }

}

你会得到

【讨论】:

  • 我必须编写自定义异常来捕获 404 错误请求!!!这听起来很疯狂
  • 如果我想向用户返回一些东西怎么办,即。 'invorrect 网址"
  • 1) 您在哪里找到编写自定义异常的义务?有关于 ExceptionMapper 的信息。一旦你有时间,请看看那个文档。 2)我更新了答案。
  • @robm,这个问题是怎么回事?
猜你喜欢
  • 2016-03-30
  • 2012-12-07
  • 1970-01-01
  • 2014-12-20
  • 1970-01-01
  • 2020-02-14
  • 2016-09-16
  • 1970-01-01
  • 2012-01-14
相关资源
最近更新 更多