【问题标题】:Error: Unsupported Media Type (Codename One)错误:不支持的媒体类型(代号一)
【发布时间】:2016-01-25 11:36:21
【问题描述】:

我正在尝试从 NetBeans IDE 上的 CN1 应用程序发送 POST 请求,但每次运行应用程序“错误 415:不支持的媒体类型”时都会收到此错误。这是我的代码:

请求代码:

@Override
    protected void onMain_ButtonAction(Component c, ActionEvent event) {
    String name=findTextField(c).getText();
    String qty=findTextField1(c).getText();

    ConnectionRequest r= new ConnectionRequest(){                       
           @Override
            protected void readResponse(InputStream input) throws IOException {                              
                 }                  
           };    
       r.setUrl("http://localhost:8080/webservicess/webresources/getreq/post");
       r.setPost(true);
       r.setHttpMethod("POST");       
       r.addArgument("name", name);
       r.addArgument("quantity", qty);
       NetworkManager.getInstance().addToQueueAndWait(r);          
    }

}

REST 服务

@POST
    @Path("post")
    @Consumes("application/json")
    public void putJson(Product product) {

        String result = "Product recieved : " + product;
        System.out.println(""+result);
    }
}

Product.java 类

class Product {
    public String name;
    public int quantity;

    Product(){

    }

}

请查看附件图片以获取错误消息的屏幕截图。 我想要一种情况,当我单击提交按钮时,输入的产品名称和数量值应显示在 REST 控制台上。请在这件事上来救我。

最好的问候,

叶海亚-伊玛目穆尼尔·科拉波

【问题讨论】:

    标签: java codenameone netbeans-8


    【解决方案1】:

    基于POST JSON fails with 415 Unsupported media type, Spring 3 mvc

    您需要设置接受请求标头,您可以在Codename One thru addRequestHeader

    r.addRequestHeader("accept", "application/json");
    

    您遇到的另一个问题有点误导,但我猜网络服务在正文中接受 JSON 而不是标准的 post 参数,所以这应该可以工作:

    final String name = findTextField(c).getText();
    final String qty = findTextField1(c).getText();
    
    ConnectionRequest r= new ConnectionRequest(){    
            @Override
            protected void buildRequestBody(OutputStream os) throws IOException {
                StringBuilder val = new StringBuilder("{\"name\":\"");
                val.append(name);
                val.append("\",\"quantity\":");
                val.append(qty);
                val.append("}");
                if(shouldWriteUTFAsGetBytes()) {
                    os.write(val.toString().getBytes("UTF-8"));
                } else {
                    OutputStreamWriter w = new OutputStreamWriter(os, "UTF-8");
                    w.write(val.toString());
                }                                  
            }
            @Override
            protected void readResponse(InputStream input) throws IOException {                              
            }                  
           };    
       r.setUrl("http://localhost:8080/webservicess/webresources/getreq/post");
       r.setPost(true);
       NetworkManager.getInstance().addToQueueAndWait(r);          
    

    【讨论】:

    • 您好,谢谢您的回复。我按照您的建议添加了该行,但我收到了另一条错误消息 "Error 400: Bad Request" 。我尝试使用从该站点pcsupport.about.com/od/findbyerrormessage/a/404error.htm 获得的方法来修复错误,但没有运气。请帮我看看这个。
    • 如果 get 成功并且 post 失败,那你为什么使用 setPost(true) 而不是 false?
    • 你是否也删除了r.setHttpMethod("POST"); 行(仅供参考,它对于发布和获取电话来说是多余的)。
    • 我想我明白了问题所在,当你提到开始工作时,我被误导了。问题是您的原始实现只是添加了标准的发布参数,但 JSON 应该在请求的正文中发送。我做了一个相对简单的例子来说明我认为它应该是什么样子,但你需要检查它,因为我没有运行它。
    • 那行不通。您需要使用 get 或 post。尝试使用像 soapui.org 这样的 JSON 测试工具,假设它与那里的配置一起工作,您可以找出代码在尝试做什么方面的不同之处。
    猜你喜欢
    • 2020-05-12
    • 2014-11-11
    • 2018-10-13
    • 2018-07-25
    • 2016-09-09
    • 2015-08-11
    • 2017-08-28
    • 2015-06-18
    • 2021-10-12
    相关资源
    最近更新 更多