首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

RestEASY + Jboss 7.x -当Accept与@Produces值不匹配时,你能默认使用first @Path吗?

在RestEASY和Jboss 7.x中,当Accept与@Produces值不匹配时,默认情况下无法使用第一个@Path。

RestEASY是一个基于Java的开源框架,用于构建RESTful Web服务。它提供了一套简单易用的注解和API,使得开发者可以轻松地创建和管理RESTful服务。

Jboss 7.x是一种Java应用服务器,它支持Java EE规范,并提供了一系列的功能和工具,用于部署和管理Java应用程序。

在RESTful服务中,@Produces注解用于指定资源的表示形式,即服务端可以生成的响应类型。而Accept头部字段用于指定客户端期望接收的响应类型。

当Accept与@Produces值不匹配时,默认情况下RestEASY和Jboss 7.x会返回406 Not Acceptable错误。这是因为它们遵循HTTP规范,要求服务器只返回客户端期望的响应类型。

如果希望在Accept与@Produces值不匹配时,默认使用第一个@Path,可以通过自定义一个ExceptionMapper来实现。具体步骤如下:

  1. 创建一个类,实现javax.ws.rs.ext.ExceptionMapper接口。
  2. 在该类上使用@Provider注解,将其注册为一个JAX-RS提供者。
  3. 在实现的toResponse方法中,判断Accept与@Produces值是否匹配,如果不匹配,则返回第一个@Path对应的资源。

以下是一个示例代码:

代码语言:txt
复制
import javax.ws.rs.Produces;
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 NotAcceptableExceptionMapper implements ExceptionMapper<NotAcceptableException> {

    @Override
    public Response toResponse(NotAcceptableException exception) {
        if (!exception.getAcceptableMediaTypes().isEmpty()) {
            // 获取第一个@Path对应的资源
            String firstPath = exception.getAcceptableMediaTypes().get(0).toString();
            // 构建响应
            return Response.status(Response.Status.OK)
                    .entity("Using first @Path: " + firstPath)
                    .type(MediaType.TEXT_PLAIN)
                    .build();
        }
        return Response.status(Response.Status.NOT_ACCEPTABLE).build();
    }
}

然后,在你的应用程序中注册该ExceptionMapper:

代码语言:txt
复制
import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;
import java.util.HashSet;
import java.util.Set;

@ApplicationPath("/")
public class MyApplication extends Application {

    @Override
    public Set<Class<?>> getClasses() {
        Set<Class<?>> classes = new HashSet<>();
        classes.add(NotAcceptableExceptionMapper.class);
        // 添加其他资源类
        return classes;
    }
}

通过以上步骤,当Accept与@Produces值不匹配时,RestEASY和Jboss 7.x会使用第一个@Path对应的资源,并返回相应的响应。

腾讯云相关产品和产品介绍链接地址:

  • 腾讯云云服务器(CVM):https://cloud.tencent.com/product/cvm
  • 腾讯云云数据库 MySQL 版:https://cloud.tencent.com/product/cdb-for-mysql
  • 腾讯云对象存储(COS):https://cloud.tencent.com/product/cos
  • 腾讯云人工智能:https://cloud.tencent.com/product/ai
  • 腾讯云物联网平台(IoT Hub):https://cloud.tencent.com/product/iothub
  • 腾讯云移动开发平台(MTP):https://cloud.tencent.com/product/mtp
  • 腾讯云区块链服务(BCS):https://cloud.tencent.com/product/bcs
  • 腾讯云元宇宙:https://cloud.tencent.com/product/tencent-meta-universe
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

揭秘:RESTEasy如何完美支持JAVA 微服务中的多种数据格式

如果此前在使用RESTful web服务,没用过除JSON 以外的文本数据交换格式[11]来进行内容传输,那么可能会认为二者是不相关的。...服务 FruitService 被用来作为微服务交互的主要路径(/fruits)。在本例中,我使用@path注释直接在该层级中定义了第一个路径,/fruits/apples。...在本例中,真正需要了解的是: @Produces annotation(注释)指明了该方法能够生成哪些内容(这将尝试匹配请求上的Accept header)。...如果您试图对一个有效端点进行HTTP调用,但是内容不能被协商,这意味着没有@Produces匹配Accept数据,或者没有@Consumes匹配Content-Type数据,将被返回HTTP状态码415...当然,可以选择其他方式去对系统进行分割,但当你需要一种快速高效、轻量级工具来支持多种数据格式RESTEasy真的是个非常不错的选择。

1.5K40

如何借助 Quarkus 和 MicroProfile 实现微服务

在底层,Quarkus 使用RESTEasy 实现,直接 Vert.X 框架协作,而不是使用 Servlet 相关的技术。...使用 Java 对象的时候,我们会将 Java 编组为@Produces注解所设置的媒体类型。具体到本服务中,输出是 JSON 文档。...●    @CircuitBreaker:执行反复失败,该服务会自动地快速失败。 ●    @Fallback:执行失败的时候,提供一个替代方案 / 默认。...但是,重试不足以解决问题并且抛出异常的时候,我们可以将错误传播至调用者,也可以为调用提供一个替代。这个替代可以来自对其他系统的调用(如分布式缓存),也可以是一个静态。...断路器处于半开状态,如果调用成功了,那么会再次关闭。否则的话,它会继续保持打开的状态。 日志 在微服务架构中,推荐将所有服务的日志收集到一起,以便于高效使用和理解。

1.8K50
  • Resteasy ,从学会使用到了解原理

    ),具体的表现形式取决于访问资源的客户端,客户端服务提供者使用一种内容协商的机制(请求头 MIME 类型)来选择合适的数据格式,最小化彼此之间的数据耦合。...这些标注包括以下: @Path:标注资源类或方法的相对路径。 @GET,@PUT,@POST,@DELETE:标注方法是用的HTTP请求的类型。 @Produces:标注返回的MIME媒体类型。...更通俗些说如果用java写了一套框架,开发者自己写的JAVA类使用了JAX-RS定义的这些注解标注过,然后通过写的这套框架就可以将有这些JAX-RS标注的类发布成web资源,供其他客户端程序去调用...”/path1/subpath/123”, 然后匹配到相应的invoker来执行客户端请求(详见以下代码段),并将结果返回,页面会显示”Hello 123”; ?...中.这样客户端请求过来后,请求路径在Registry中匹配到相应的SpringBean就可以调用该SpringBean的ResourceFactory的createResource方法,该方法可以从

    2.6K40

    Quarkus的RESTEasy Reactive集成已合并master

    这些新功能是: 默认阻塞:现在,默认情况下,所有端点都在IO线程上运行。您可以@Blocking用来更改它。...RESTEasy Reactive,您甚至不需要使用,@PathParam或者@RestPath您的参数path参数具有相同的名称,并且类似地,您可以跳过@Context所有已知的上下文类型,这使它更加简单...但是在RESTEasy Reactive中,您可以简单地执行以下操作: @Path("first") public class FirstResource { @GET @Produces...现有quarkus-resteasy扩展集成的扩展也quarkus-resteasy-active扩展集成。...该项目已降落在Quarkus主分支,所以,如果渴望尝试一下,就必须按照从源代码编译Quarkus这和使用遵循正确BOM和版本此。

    25030

    quarkus实战之七:使用配置

    整篇文章由以下内容构成: 创建工程,作为演示使用配置项操作的代码 演示最基本的使用配置项操作 展示配置项不存时会导致什么问题 演示如何设置默认,这样配置项不存在也不会出错 默认是字符串,而实际的变量可以是多种类型...可以给ConfigProperty注解设置默认,这样一旦找不到配置项,就使用默认注入,可以避免启动失败了 HobbyResource.java的源码如下,成员变量notExistsConfig的注解了增加属性...() + ", " + list; } } 配置项not.exists.config不存在,页面响应如下,只有greeting.message配置项的: 配置项not.exists.config...=123456,页面响应如下,两个配置项的都能成功获取: 另外,官方建议不要使用System.getProperty(String) 和 System.getEnv(String)去获取配置项了,...int age(); /** * 名字配置项不一致,用WithName注解指定配置项 * @return */ @WithName("description

    1.2K30

    quarkus依赖注入之一:创建bean

    ,quankus官方建议不要使用私有变量(用默认可见性,即相同package内可见),因为GraalVM将应用制作成二进制可执行文件,编译器名为Substrate VM,操作私有变量需要用到反射,而GraalVM...Language (EL)集成 装饰注入对象的能力(个人想到了AOP,拿到的对象其实是个代理) 拦截器对象关联的能力 事件通知模型 web会话上下文 一个SPI:允许便携式扩展容器的集成(integrate...; import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; import java.time.LocalDateTime; @Path...没有任何关系 下面的代码演示了用注解修饰方法,使得quarkus调用此方法,将返回作为bean实例注册到容器中,Produces通知quarkus做实例化,ApplicationScoped表明了bean...,可见前面的使用并无区别,都是从quarkus的依赖注入 @Path("/fieldannotataionbean") public class FieldAnnotationController

    1.1K50

    quarkus实战之四:远程热部署

    通过热部署,使本地的改动立即在服务器上生效,这一切都是自动的,无需打包部署等操作 就是下图这样: 以上是常见的处理问题手段,如果咱们的代码是quarkus应用,也这样远程调试?...; import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; import java.time.LocalDateTime; @Path...(); } } 打开文件application.properties,增加以下三个配置,每个配置的作用请看注释: # 这是一个自定义属性,在业务代码中使用ConfigProperty注解取得其...在服务器运行 接下来的操作是在服务器上进行的 首先确保服务器可以使用这个镜像(访问镜像仓库、或者用tar导入等) 执行以下命令启动镜像,注意环境变量QUARKUS_LAUNCH_DEVMODE是必须的...Listening for transport dt_socket at address: 5005 2022-03-02 08:52:44,299 INFO [org.jbo.threads] (main) JBoss

    57220

    @RequestMapping属性详解 - SpringMVC高手进阶

    8、produces 前言 在日常java面试中springMVC已经是必不可少的一环了,昨天几位朋友交流了一下面试SpringMVC框架的心得。...可以看到注解中的属性除了 name() 返回的字符串,其它的方法均返回数组,也就是可以定义多个属性,例如 value() 和 path() 都可以同时定义多个字符串来接收多个URL请求...value同义,path(value)(path 和 value 互相引用,参见RequestMapping接口源码) path属性,和1中的value属性使用一致,两者都是用来作为映射使用的。...@RequestMapping(value=“login”)、@RequestMapping(path=“login”),这两种情况都能对login()方法进行访问 path属性支持通配符匹配: @RequestMapping..."; } 此外,produces属性还可以指定返回的编码 @RequestMapping(value = "login",produces = "application/json,charset=utf

    5.2K31

    ContentNegotiation内容协商机制(一)---Spring MVC内置支持的4种内容协商方式【享学Spring MVC】

    前言 不知使用Spring Boot是否对这样一个现象"诧异"过:同一个接口(同一个URL)在接口报错情况下,若你用rest访问,它返回给你的是一个json串;但若你用浏览器访问,它返回给你的是一段...但若我们postman手动指定这个头:Accept:application/json,返回就和浏览器有差异了(若不手动指定,Accept默认是*/*): ?...小技巧:我个人建议是这部分接收(这部分不使用@PathVariable接收),拿出来只为内容协商使用 扩展名优先级比Accept要高(并且和使用神马浏览器无关) 优缺点: 优点:灵活,不受浏览器约束...备注:若produces属性要指定的非常多,建议可以使用!...这就是Spring Boot默认的对异常处理方式:它使用的就是基于 固定类型(produces)实现的内容协商。

    2K20

    SpringMVC-@RequestMapping的参数和用法

    按映射处理程序可以使用的媒体类型( media type)缩小主映射范围。由一个或多个媒体类型组成,其中一个媒体类型必须请求 Content Type头匹配。...produces 指定返回的内容类型,仅request请求头中的(Accept)类型中包含该指定类型才返回。 按可由映射处理程序生成的媒体类型缩小主映射范围。...否则,如果请求中的媒体类型包含对应参数,则假定客户端接受任何。 表达式可以使用!进行否定,如中所示!text/plain,它匹配所有Accept非“text/plain”的请求。...任何环境的格式都相同:一系列“myParam=myValue”样式的表达式,只有在发现每个此类参数都具有给定才映射请求。 表达式可以使用“!=”进行否定运算符,如“myParam!...任何环境的格式都相同:一系列“My-Header=myValue”样式的表达式,只有在发现每个这样的头都有给定的,才会映射请求。 表达式可以使用“!=”进行否定运算符,如“My-Header!

    68110

    quarkus实战之六:配置

    ,而不是硬编码(hard code) 配置有关的知识点不少,本文重点是如何设置,下一篇会详细说明如何使用配置 本篇要学习和掌握的内容:先实践六种具体的配置方式,例如通过在系统变量、application.properties...; import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; import java.time.LocalDateTime; @Path...,如下所示,greeting.message的由两部分拼接而成:固定的hello, 、以及配置项greeting.name的,表达式的格式是${配置项名称:配置项找不到时的默认},:xxxxxx的意思是如果找不到配置项...greeting.name配置项的: 现在去掉配置项greeting.message,看看默认xxxxxx能否生效,如下图,在找不到配置项greeting.message的时候,咱们配置的默认已经生效了...配置内容:UUID 同一个应用同时在多个机器上运行时,如何让每个进程有个独立的身份?

    1.1K20

    SpringMVC 教程 - Controller

    Spring MVC使用的是Spring core 中的AntPathMatcher来匹配路径。 模式对比 有很多模式匹配URI的时候,必须通过对比来找到最合适的匹配。...匹配的模式分数相同是,选择匹配模式长的那个,如果分数和长度都相同,选择变量比通配符少的那个。 /**是参与评分的,而且总会是最后一个选择。...而且过去一段时间内,使用后缀名匹配的时候会有各种各样的问题,使用URI变量,路径参数,URI编码后缀模式会导致歧义。...可产生的媒体类型 可以通过Accept头来缩小请求的匹配范围,例如: @GetMapping(path = "/pets/{petId}", produces = "application/json;charset...myParam”)或者指定一个(”myParam=myValue”)。

    99410

    【小家Spring】Spring MVC容器的web九大组件之---HandlerMapping源码详解(二)---RequestMappingHandlerMapping系列

    *这样匹配的,那就默认的pattern就给你添加上后缀"....{}; // 指定request中必须包含某些参数值,才让该方法处理 // 使用 params 元素,可以让多个处理方法处理到同一个URL 的请求, 而这些请求的参数是不一样的 // 如...// 仅request请求头中的(Accept)类型中包含该指定类型才返回; // 参见枚举类:org.springframework.http.MediaType // 它可以使用!...所以可以认为:headers是更为强大的(所有需要指定key和value嘛),而consumes和produces是专用的,头的key是固定的,所以只需要写value即可,使用起来也更加的方便~。...Spring对这块的设计也是很灵活的,允许自己配置,也允许啥都不做使用Spring默认的配置。

    1.9K21

    Spring MVC 学习总结(二)——控制器定义@RequestMapping详解

    为空 注解在方法上,如果value为空则表示该方法为类下默认的Action。...注解在类上value为空则为默认的控制器,可以用于设置项目的起始页。...通过路径变量的类型可以约束访问参数,如果类型不一样,则访问不到action,如这里访问是的路径是/action3/1/a,则路径方法匹配,而不会是参数转换失败。...指定处理请求的提交内容类型(Content-Type),例如application/json, text/html,收窄请求范围,如果用户发送的请求内容类型匹配则方法不会响应请求,具体使用如下代码所示...text/html" 2.4、produces属性指定响应的Content-Type,约束Accept类型 指定返回的内容类型,仅request请求头中的(Accept)类型中包含该指定类型才返回,方法才处理客户端的请求否则会报

    92120

    webservice有哪些框架_web前端主流框架有哪些

    作为一个JBOSS的项目,它当然JBOSS应用服务器很好地集成在一起。但是,它也能在任何运行JDK5或以上版本的Servlet容器中运行。...RESTEasy还提供一个RESTEasy JAX-RS客户端调用框架。能够很方便EJB、Seam、Guice、Spring和Spring MVC集成使用。...(资料少无法比较) 有较专业的人士对CXF、Restlet、RESTEasy、Jersey框架测试【数据】,他说从性能上看RESTEasy是最好的,Jersey其次(但Jersey连可查阅的英文文档都比较少故个人推荐使用...CXF强调代码优先的设计方式(code-first design),使用了简单的API使得从现有的应用开发服务变得方便。】{ 百度观点} 3....(axis2cxf 都支持很多优秀的框架(上已提到),但axis2扩展性比cxf要好,axis2不仅支持java对c/C++提供支持)(个人观点)【RESTEasy支持许多比较优秀的框架】(百度加个人观点

    2.4K20

    请求头 content-type_详解中台

    : 需要在表单中进行文件上传,就需要使用该格式 以上就是我们在日常的开发中,经常会用到的若干content-type的内容格式。...request中必须包含某些指定的header,才能让该方法处理请求 其中,consumes, produces使用content-typ信息进行过滤信息;headers中可以使用content-type...Header里面可以出现的信息,局限在Referer信息。...,越大则优先权越高(从0到1) ③Accept:*/*,text/*,text/html 将按照如下顺序进行produces匹配 ①text/html ②text/* ③*/* 即匹配规则为...(HTTP 1.1默认进行持久连接) Connection: close Cookie HTTP请求发送,会把保存在该请求域名下的所有cookie一起发送给web服务器。

    76820

    解析Spring中的ResponseBody和RequestBody

    spring,restful,前后端分离这些关键词都是大家耳熟详的关键词了,一般spring常常需要与前端、第三方使用JSON,XML等形式进行交互,也一定不会对@RequestBody和@ResponseBody...通常情况下,我们的服务端返回的形式一般是固定的,即限定了是JSON,XML中的一种,建议依赖于客户端添加Accept的信息,而是在服务端限定produces类型。...详解Accpectproduces Accpect包含在http协议的请求头中,其本身代表着客户端发起请求,期望返回的响应结果的媒体类型。...在上一节中,我们未显示指定produces,其实就隐式的表明,支持XML形式,JSON形式的媒体类型响应。...从实验结果,我们也可以看出,请求未指定Accpect,响应未指定produces,具体采用何种形式返回是有Spring控制的。

    6.8K171

    支持JDK19虚拟线程的web框架,中篇:完整开发一个支持虚拟线程的quarkus应用

    一个注解就搞定的事情,还要写一篇文章?这不是在浪费作者自己和各位读者的时间?...,还要在代码中手写SQL,取出也要逐个字段匹配,其实quarkus也支持JPA,只不过本篇使用的是响应式数据库驱动,所以选用的是Vert.x生成的连接池PgPool package com.bolingcavalry.repository...vt/persons/1,页面正常显示了,看来功能是不受影响的 再用docker logs命令查看后台日志,如下图箭头所示,quarkus给出了WARN级别的提示:由于当前虚拟机不支持虚拟线程,改为使用默认的阻塞来执行业务逻辑...前文已经验证了性能上区别不大,那还有别的方式来观察和区分?...孤单,欣宸原创一路相伴 Java系列 Spring系列 Docker系列 kubernetes系列 数据库+中间件系列 DevOps系列

    1K20
    领券