我用一个JSON请求调用一个REST服务,它的响应是一个HTTP 415 "Unsupported Media Type"错误.

请求内容类型设置为("Content-Type", "application/json; charset=utf8").

如果我不在请求中包含JSON对象,它可以很好地工作.我正在使用JSON的google-gson-2.2.4库.

我试着使用了几个不同的库,但没有什么不同.

谁能帮我解决这个问题吗?

以下是我的代码:

public static void main(String[] args) throws Exception
{

    JsonObject requestJson = new JsonObject();
    String url = "xxx";

    //method call for generating json

    requestJson = generateJSON();
    URL myurl = new URL(url);
    HttpURLConnection con = (HttpURLConnection)myurl.openConnection();
    con.setDoOutput(true);
    con.setDoInput(true);

    con.setRequestProperty("Content-Type", "application/json; charset=utf8");
    con.setRequestProperty("Accept", "application/json");
    con.setRequestProperty("Method", "POST");
    OutputStream os = con.getOutputStream();
    os.write(requestJson.toString().getBytes("UTF-8"));
    os.close();


    StringBuilder sb = new StringBuilder();  
    int HttpResult =con.getResponseCode();
    if(HttpResult ==HttpURLConnection.HTTP_OK){
    BufferedReader br = new BufferedReader(new   InputStreamReader(con.getInputStream(),"utf-8"));  

        String line = null;
        while ((line = br.readLine()) != null) {  
        sb.append(line + "\n");  
        }
         br.close(); 
         System.out.println(""+sb.toString());  

    }else{
        System.out.println(con.getResponseCode());
        System.out.println(con.getResponseMessage());  
    }  

}
public static JsonObject generateJSON () throws MalformedURLException

{
   String s = "http://www.example.com";
        s.replaceAll("/", "\\/");
    JsonObject reqparam=new JsonObject();
    reqparam.addProperty("type", "arl");
    reqparam.addProperty("action", "remove");
    reqparam.addProperty("domain", "staging");
    reqparam.addProperty("objects", s);
    return reqparam;

}
}

requestJson.toString()的值为:

{"type":"arl","action":"remove","domain":"staging","objects":"http://www.example.com"}

推荐答案

不确定原因,但从con.setRequestProperty("Content-Type", "application/json; charset=utf8")中删除第charset=utf8行解决了问题.

Java相关问答推荐

请求 Spring Data JPA 存储库时指定复杂的排序标准

Android Material TextInputLayout endIcon 截断 MaterialAutoCompleteTextView 中的文字

Javax.swing 如何删除前一个矩形

无法将 JDA 导入 Maven - IntelliJ IDEA

Springboot的@Controller和@RestController注解什么时候使用,底层概念是什么?

使用 PreparedStatement 附加到查询

如何使用 Spring SAML2 禁用自动生成的页面 /login 和 /logout?

Java泛型:类型参数的多个边界

如何使用固定参数和可变参数制作流?

Do...while 在输入验证中不起作用

EntityManager.remove 和 EntityManager.persist 上的 JPA 重复条目错误

如何在执行 Collectors.toMap() 之前删除会导致冲突的键

让 Jackson 使用 GSON 注释

如何遵循鲍勃叔叔的规则(建议)在一种方法中正确使用一个 try-catch 块?

如何使用 Stream API 将 Object 类型的实例映射到 Java 中的特定类

试图在java spring中调用/发布第三方api

带有可变参数的消费者

Java @Override equals(): 当 this.getClass() != o.getClass() 失败但不应该

再次“过时的元素引用:元素未附加到页面文档”

如何在 Spring-Data-JDBC 中设置 fetch-size