当前位置: 首页 > 知识库问答 >
问题:

Rest@produces和@consumes:为什么不调用相同的mime类型

颜光临
2023-03-14
package com.lbs.rest;

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

@Path("/hello")
public class Test {


    //-- produces MIME type text/plain
    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public  String thankYouTxt(){
        System.out.println("thankYouTxt");

        return "thankYouTxt\n";
    }

    //-- consumes MIME type text/plain
    @GET
    @Consumes(MediaType.TEXT_PLAIN)
    public String thankYouInputTxt(){
        System.out.println("thankYouInputTxt");
        return "thankYouInputTxt";

    }


    //-- produces MIME type text/html
    @GET
    @Produces(MediaType.TEXT_HTML)
    public  String thankYouHTML(){
        System.out.println("thankYouHTML"); 
        return "thankYouTxtHTML";
    }


    //-- consumes MIME type text/html
    @GET
    @Consumes(MediaType.TEXT_HTML)
    public  void thankYouInputHTML(){
        System.out.println("thankYouInputHTML");
        //return "thankYouInputHTML";
    }



    //-- produces MIME type text/xml 
    @GET
    @Produces(MediaType.TEXT_XML)
    public  String thankYouXML(){
        System.out.println("thankYouXml");
        return "<?xml version=\"1.0\"?> <message>thankYouTxt</message>";
    }
    //-- consumes MIME type text/xml    
    @GET
    @Consumes(MediaType.TEXT_XML)
    public String thankYouInputXML(){
        System.out.println("thankYouInputXML");
        return "thankYouInputXML";
    }



}

共有1个答案

王磊
2023-03-14

你应该记住:

  1. 单个请求只执行一个方法。因此,不可能在一个请求中执行两个(或更多)方法;
  2. JAX-RS运行时根据发送到服务器的请求头值决定应该执行哪个方法。

JAX-RS运行时尝试匹配:

如果您需要更多关于RestFull webservices的信息,我建议您阅读以下参考资料:

>

  • RFC2616

    使用JAX-RS的RESTful Java-Bill Burke

  •  类似资料:
    • 问题内容: 因此,我知道您正在指定类型,但是为什么呢?在什么条件下会很重要。例如,如果我具有以下方法,并且注释掉@Produces批注,它仍将返回JSON。 API文档说:“如果未指定,则容器将假定可以产生任何类型。” 那么,为什么我不希望容器承担这种责任呢? 问题答案: 我认为这取决于您的JAX- RS实现,但这是泽西对其@Produces批注的解释:https ://jersey.java.n

    • 问题内容: 在以下代码中,我不明白为什么当它属于两个不同的对象时具有相同的ID? 问题答案: 我认为这是正在发生的事情: 取消引用时,将在内存中创建其副本。该存储位置由以下位置返回 由于没有引用到刚刚创建的方法的副本,因此GC将其回收,并且该内存地址再次可用 取消引用时,将在相同的内存地址(可用)中创建它的副本,您可以再次使用该地址。 第二个副本是GCd 如果您要运行一堆其他代码并再次检查实例方法

    • 问题内容: 我继承了一些旧版Java(1.4)代码,并且此设计决策会定期出现。我不知道是否有任何目的或理由。 据我了解接口(并且我的实验得到了加强),使父级和子级实现相同的接口是没有目的的。在这种情况下,from 中的所有内容都在中实现,而in中的方法在中实现。然而,这并不创造需要有落实。 关于接口,有什么我不知道的东西会给这种模式带来一些目的或好处?除了缺乏清晰性之外,还有其他潜在成本会促使其重

    • 问题内容: 以下内容具有不同的URL时,如何产生此错误? 是的,它们都是GET并产生相同的,所以? 错误: [[FATAL]资源模型具有用于HTTP方法GET的模棱两可(子)资源方法,并且由Java方法public javax.ws.rs.core.Response中的“ @Consumes”和“ @Produces”注释定义的输入mime类型com.EmpTaskResource.getEmpT

    • Clang和GCC都抱怨格式不正确,并给出了奇怪的诊断。 Clang报告 GCC报告 但是,根据expr.static.cast#4 如果存在从E到T的隐式转换序列([over.best.ics]),则表达式E可以显式转换为类型T 将一个类型转换为同一类型不是叫做标识转换吗? over.best.ics#General-8 如果不需要转换来将参数与参数类型匹配,则隐式转换序列是由标识转换([ove

    • } 我得到了下面的结果。但是在这个结果中,高亮显示的行具有相同的列名,但是别名不同。为什么hibernate会得到相同的Cloumn? 冬眠:删除表,如果存在hibernate_sequence hibernate:删除表(如果存在)UserDetails Hibernate:如果存在,则删除表车辆Hibernate:创建表hibernate_sequence(next_val bigint)En