java - REST Web 服务始终使用 CodenameOne 客户端返回 html

标签 java rest tomcat jersey codenameone

我已经通过 jerseytomcat 创建了一个网络服务,这里是:

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


  // This method is called if TEXT_PLAIN is request
  @GET
  @Produces(MediaType.TEXT_PLAIN)
  public String sayPlainTextHello() {
        boolean flag=true;
    return "Hello Jersey";
  }

  // This method is called if XML is request
  @GET
  @Produces(MediaType.TEXT_XML)
  public String sayXMLHello() {
        boolean flag=true;
    return "<?xml version=\"1.0\"?>" + "<hello> Hello Jersey" + "</hello>";
  }

  // This method is called if HTML is request
  @GET
  @Produces(MediaType.TEXT_HTML)
  public String sayHtmlHello() {
    boolean flag=true;
    return "<html> " + "<title>" + "Hello Jersey" + "</title>"
        + "<body><h1>" + "Hello Jersey" + "</body></h1>" + "</html> ";
  }

Codenameone 我这样设置客户端:

public static void getRest(){

        String service="http://localhost:8080/com.vogella.jersey.first/rest/hello";

        ConnectionRequest req = new ConnectionRequest(){

              @Override
              protected void postResponse() {

              }
               @Override
              protected void readResponse(InputStream input) throws IOException {
                  // JSONParser p = new JSONParser();

                //  System.out.println(Util.readToString(input));

                  Dialog dd=new Dialog(Util.readToString(input));
                  hi.addComponent(dd);
              }

          };

          req.setUrl(service);
          req.setPost(false);
          req.setContentType(MediaType.TEXT_PLAIN);


          InfiniteProgress prog = new InfiniteProgress();
          Dialog dlg = prog.showInifiniteBlocking();
          req.setDisposeOnCompletion(dlg);
          NetworkManager.getInstance().addToQueue(req);
    }

codenameone 中的默认示例设置了 req.setContentType("text/plain");但是在客户端和 ws 中更改此选项结果是相同的,我总是得到 html 而不是 xml 或文本...这不是很重要,因为很快我应该得到 json 但是我想在继续之前我必须了解这件事...谢谢

最佳答案

我从未使用过 CodeNameOne,但我很确定 setContentType 设置了 Content-Type header 。在请求中,就是说客户端发送的数据类型就是该内容类型。但是对于 GET 通常没有数据,所以 Content-Type 没有用。

对于一个请求,当你想告诉服务器你想要返回什么内容类型时,你可以设置 Accept header 。当你不设置它时,它通常默认为 */*,这让 Jersey 只能选择一个。在您的情况下,它似乎总是选择 text/html

看起来是 ConnectionRequest ,我没有看到任何 setAccept 方法,但看起来您可以使用 addRequestHeader .于是乎

req.addRequestHeader("Accept", "text/plain");

关于java - REST Web 服务始终使用 CodenameOne 客户端返回 html,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32711794/

相关文章:

java - 编译或运行时出现 java 错误

javascript - location.path() AngularJS 方法中的重定向

java - RestEasy - 无法找到 MessageBodyReader?

java - 处理@DiscriminatorColumn 中的 NULL 值

java - Glassfish OpenSSO 说明(从哪里下载 OpenSSO)?

java - 当JAVA中不存在REST API方法时返回JSON而不是html错误页面

java - Tomcat 没有在 Web 应用程序的上下文中添加斜杠

web-services - 如何使用 Tomcat 7.0.27 提供 SPARQL 端点

java - jna Native.LoadLibrary 无法在服务器上加载库(在本地工作)

java - JTextPane 高亮文本