gpt4 book ai didi

java - 休息| @生产和@消费: why dont they both get called for same MIME-type

转载 作者:行者123 更新时间:2023-12-01 08:11:14 26 4
gpt4 key购买 nike

JAX-REST 的新手(jersey 1.8 impl)

我有一个资源“/hello”的类(class)

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";
}



}

当我发送带有 header Content-Type : text/html 的请求时,我希望同时出现 @Produces@Consumes要调用的带注释的方法 thankYouHTML()thankYouInputHTML()

但只有 @ProducesthankYouHTML() 方法被调用?为什么?为什么没有调用 @Consumes 带注释的方法 thankYouHInputTML()

最佳答案

你应该记住:

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

JAX-RS 运行时尝试匹配:

  • 带有正确注释的 http 方法 (GET,POST, ...) (@GET, @POST ,...);

  • 使用正确的 @Path 注释请求路径 ('/api/something');

  • http content-type header ( link ),带有正确的 @Consumes 注释;

  • http accept header ,带有适当的 @Produces 注释;

因此(例如)@Produces 注释并不表示带注释的方法会产生某些内容。表示当请求中包含匹配的accept header时,该方法将被执行。

如果您需要有关 RestFull Webservices 的更多信息,我建议您阅读以下资源:

关于java - 休息| @生产和@消费: why dont they both get called for same MIME-type,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17148529/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com