এইচটিপি 415 অসমর্থিত মিডিয়া প্রকারের ত্রুটিটি JSON- এর সাথে


115

আমি একটি JSON অনুরোধের সাথে একটি REST পরিষেবা কল করছি এবং এটি একটি HTTP 415 "Unsupported Media Type"ত্রুটির সাথে সাড়া দেয় ।

অনুরোধ সামগ্রীর প্রকার সেট করা আছে ("Content-Type", "application/json; charset=utf8")

আমি অনুরোধে কোনও JSON অবজেক্টটি অন্তর্ভুক্ত না করলে এটি ঠিকঠাক কাজ করে। আমি google-gson-2.2.4JSON এর জন্য লাইব্রেরিটি ব্যবহার করছি ।

আমি কয়েকটি বিভিন্ন লাইব্রেরি ব্যবহার করার চেষ্টা করেছি কিন্তু এতে কোনও পার্থক্য হয়নি।

কেউ কি দয়া করে এটি সমাধান করতে আমাকে সহায়তা করতে পারেন?

আমার কোডটি এখানে:

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


আপনার প্রশ্নটি requestJson.toString()
সবুজ হাসান

1
RequestJson.toString মান: { "টাইপ": "arl", "কর্ম": "সরান", "ডোমেইন": "উপস্থাপনকারী", "বস্তু": " abc.com "}
user3443794

আপনি সার্ভার অংশ লিখেছেন? আপনি যদি পোস্টম্যানের সাথে একই অনুরোধটি করেন (ক্রোম এক্সটেনশনগুলি, গুগল এটি), এটি কি কাজ করে? সম্ভবত কোনও কারণে JSON সামগ্রী প্রকারটি সার্ভার গ্রহণ করে না?
জোস্কারসন

হ্যাঁ আমি সাবান ইউআই ব্যবহার করে পরীক্ষা করেছি। আমি জেসন সহ ঠিক একই অনুরোধটি প্রেরণ করেছি এবং সার্ভারের কাছ থেকে সফল সাড়া পেয়েছি।
ব্যবহারকারী 3443794

@ জোস্কারসসন, ১৪ মার্চ ২০১ 2017 সাল থেকে পোস্টম্যান ক্রোম এক্সটেনশন হ্রাস করা হয়েছে। তারা নেটিভ অ্যাপ্লিকেশন এ স্থানান্তরিত। এখানে তাদের ব্লগ পোস্টটি দেওয়া হয়েছে: http://blog.getpostman.com/2017/03/14/
गामी-native/

উত্তর:


81

কারণ সম্পর্কে নিশ্চিত নয় তবে সমস্যার সমাধান charset=utf8থেকে লাইনগুলি সরানো con.setRequestProperty("Content-Type", "application/json; charset=utf8")


এটি সম্ভবত আরএসটি পরিষেবাদির একটি বাগ। তারা সম্ভবত charsetবিষয়বস্তুর ধরণে সেট হওয়ার আশা করে না । আমার অনুমান যে তারা স্ট্রিংটি পরীক্ষা করছে "application/json; charset=utf-8" == "application/json"। বলা হচ্ছে, জেএসওএন অবশ্যই আউট -8 হওয়া উচিত তাই চরসেটটি ছেড়ে দেওয়া পুরোপুরি বৈধ।
টিম মার্টিন

19
কারণ charset=utf8একটি বৈধ চরিত্র সেট উপাধি নয়। সঠিক সংস্করণ হবে charset=utf-8। ড্যাশ গুরুত্বপূর্ণ। বৈধ চরিত্র সেট উপাধিগুলির তালিকা আইএএনএ আরএফসি 2879 দ্বারা পরিচালিত হয়: iana.org/assignments/character-sets/character-sets.xhtml
বারিন লরিচচ

বিভিন্ন জিনিস চেষ্টা করে পুরো সময় নষ্ট করে এবং তারপরে অক্ষটি = utf8 অপসারণ করার চেষ্টা করে এবং এটি কার্যকর। ধন্যবাদ।
সালমান

53

যোগ করুন Content-Type: application/jsonএবং Accept:application/json


1
আপনি ব্যবহার যদি পিয়ন পরীক্ষার জন্য, এর এই অংশ যোগ করার জন্য চেষ্টা শিরোলেখ আবেদন / JSON: সামগ্রী-প্রকার
Z3d4s

13

এটি কারণ charset=utf8একটি স্থান ছাড়া হওয়া উচিত application/json। এটা ঠিক কাজ করবে। এটি ব্যবহার করুনapplication/json;charset=utf-8


এটি ভুল; স্পেসগুলি অনুমোদিত এবং এড়ানো উচিত; দেখতে tools.ietf.org/html/rfc2046
ডিজেবি

11

আপনি jquery আজাক্স অনুরোধ করা হয়, যোগ করতে ভুলবেন না

contentType:'application/json'

4

আপনি যদি AJAX jQueryঅনুরোধটি ব্যবহার করেন তবে এটি প্রয়োগ করা আবশ্যক। তা না হলে এটি আপনাকে 415ত্রুটি ছুঁড়ে দেবে ।

dataType: "json",
contentType:'application/json'

2

এইচটিটিপি শিরোনাম পরিচালককে যুক্ত করুন এবং এতে আপনার এপিআইয়ের শিরোনামের নাম এবং মান যুক্ত করুন। উদাহরণস্বরূপ বিষয়বস্তুর ধরণ, গ্রহণ করুন ইত্যাদি আপনার সমস্যার সমাধান করবে।


2

আপনি যদি এইটি আরএসএএ মিডলওয়্যার বা অনুরূপ প্রতিক্রিয়াতে পান তবে শিরোনামগুলি যুক্ত করুন:

  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
  },
  body: JSON.stringify(model),

1

কিছু সময় অনুরোধটি প্রেরণ করার সময় চরসেট মেটাডা জসনকে ভেঙে দেয়। আরও ভাল, অনুরোধের ধরণে চরসেট = utf8 ব্যবহার করবেন না।


2
utf8 কেবল একটি বৈধ অক্ষর সেট নয়। অনুমানটি দেখুন
বেরিন লরিচচ

1

Requestআমার নিয়ামক প্রাপ্ত ক্লাসটি আপডেট করে আমি এটি ঠিক করেছি।

আমি আমার সার্ভারের পাশ থেকে আমার ক্লাস থেকে নিম্নলিখিত শ্রেণীর স্তরের টিকাটি সরিয়েছিRequest । এর পরে আমার ক্লায়েন্ট 415 ত্রুটি পান নি।

import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement

1

৪১৫ (অসমর্থিত মিডিয়া টাইপ) স্থিতি কোডটি নির্দেশ করে যে উত্স সার্ভারটি অনুরোধটি পরিষেবা করতে অস্বীকার করছে কারণ পেডলোডটি এমন ফর্ম্যাটে রয়েছে যাতে লক্ষ্য সংস্থানটিতে এই পদ্ধতিটি সমর্থন করে না। বিন্যাসের সমস্যাটি অনুরোধের নির্দেশিত সামগ্রী-প্রকার বা সামগ্রী-এনকোডিংয়ের কারণে বা সরাসরি ডেটা পরিদর্শন করার ফলে হতে পারে। ডক


0

আমি "মুছে ফেলুন" বিশ্রামের অনুরোধ পাঠিয়েছিলাম এবং এটি 415 এর সাথে ব্যর্থ হয়েছিল my আমার ক্ষেত্রে এটি "অ্যাপ্লিকেশন / জসন" পরিবর্তে "অ্যাপ্লিকেশন / জসন; চরসেট = ইউটিএফ 8" ছিল।

সুতরাং আপনার এপিআই বিকাশকারীকে জিজ্ঞাসা করুন এবং এর মধ্যে কেবল সামগ্রী-প্রকার = "অ্যাপ্লিকেশন / জেসন" দিয়ে অনুরোধ প্রেরণের চেষ্টা করুন।


0

আমারো একই ইস্যু ছিল. সিরিয়ালাইজেশনের জন্য আমার সমস্যা ছিল জটিল বিষয়। আমার বস্তুর একটি বৈশিষ্ট্য ছিল Map<Object1, List<Object2>>। আমি মত এই অ্যাট্রিবিউট পরিবর্তন List<Object3>যেখানে Object3রয়েছে Object1এবং Object2এবং সবকিছু কাজ করে জরিমানা।


0

আমি জানি যে ওপিকে তার সমস্যাটি মোকাবেলায় সহায়তা করতে খুব দেরি হয়েছে, তবে আমরা সকলেই এই সমস্যাটির মুখোমুখি হয়েছি, আমি আমার ক্লাসের প্যারামিটার দিয়ে কনস্ট্রাক্টরটি সরিয়ে এই সমস্যাটি সমাধান করেছি যা জেসন ডেটা ধরে রাখার উদ্দেশ্যে ছিল।


0

কনফিগারেশনে ম্যাপিংজ্যাকসন 2 এইচটিটিপি ম্যাসেজ কনভার্টারটি ম্যানুয়ালি যুক্ত করুন আমার জন্য সমস্যাটি সমাধান করেছেন:

@EnableWebMvc
@Configuration
@ComponentScan
public class RestConfiguration extends WebMvcConfigurerAdapter {

    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> messageConverters) {
        messageConverters.add(new MappingJackson2HttpMessageConverter());
        super.configureMessageConverters(messageConverters);
    }
}

0

কারণটি আপনার প্রেরক সার্ভলেট এক্সএমএল ফাইলটিতে "টিকা-চালিত" যুক্ত করা যায় না। এবং এটি শিরোনামগুলিতে অ্যাপ্লিকেশন / জেসন হিসাবে যোগ না করার কারণেও হতে পারে

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.