Http 415 niet-ondersteunde mediatypefout met JSON

Ik bel een REST-service met een JSON-verzoek en deze reageert met een HTTP 415 "Unsupported Media Type"-fout.

Het inhoudstype van het verzoek is ingesteld op ("Content-Type", "application/json; charset=utf8").

Het werkt prima als ik geen JSON-object in de aanvraag opneem. Ik gebruik de bibliotheek google-gson-2.2.4voor JSON.

Ik heb geprobeerd een aantal verschillende bibliotheken te gebruiken, maar het maakte geen verschil.

Kan iemand me alsjeblieft helpen dit op te lossen?

Hier is mijn code:

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

De waarde van requestJson.toString()is :

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


Antwoord 1, autoriteit 100%

Niet zeker over de reden, maar het verwijderen van regels charset=utf8uit con.setRequestProperty("Content-Type", "application/json; charset=utf8")opgelost het probleem.


Antwoord 2, autoriteit 83%

Voeg Content-Typetoe: application/jsonen Accept: application/json


Antwoord 3, autoriteit 17%

Als je een jQuery ajax-verzoek doet, vergeet dan niet om

. toe te voegen

contentType:'application/json'

Antwoord 4, autoriteit 15%

Dit komt omdat charset=utf8zonder spatie moet staan na application/json. Dat zal prima werken. Gebruik het zoals application/json;charset=utf-8


Antwoord 5, autoriteit 4%

Als u AJAXjQueryRequest gebruikt, is dit een must om toe te passen. Zo niet, dan krijg je een 415-foutmelding.

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

Antwoord 6, autoriteit 4%

Als je dit krijgt in React RSAA-middleware of iets dergelijks,
Voeg de koppen toe:

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

Antwoord 7, Autoriteit 3%

HTTPVERB heeft zijn kopteksten nodig als een woordenboek van sleutelwaardeparen

headers = {'Content-Type': 'application/json', 'charset': 'utf-8'}

Antwoord 8, Autoriteit 2%

Voeg de HTTP Header-manager toe en voeg er in de namen en waarden van uw API-namen toe.
b.v. Inhoudstype, accepteren, enz. Die uw probleem oplost.


Antwoord 9

Soms breekt Charset Metada de JSE tijdens het verzenden van het verzoek. Beter, gebruik geen CharsSet = UTF8 in het aanvraagtype.


Antwoord 10

Ik heb dit opgelost door de RequestCLEDE te bijwerken die mijn controller ontvangt.

I Verwijderd De volgende klassive-annotatie van mijn RequestKlasse aan mijn serverzijde. Daarna ontving mijn klant geen 415 fout.

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

Antwoord 11

De statuscode van 415 (niet-ondersteunde mediatype) geeft aan dat de
Origin Server weigert het verzoek te onderhouden omdat de lading
is in een formaat dat niet door deze methode op de doelbron wordt ondersteund.
Het formaatprobleem kan te wijten zijn aan het aangegeven verzoek
Inhoudstype of inhoudscodering, of als gevolg van het inspecteren van de
gegevens rechtstreeks.
DOC


Antwoord 12

Ik stuurde een “verwijder” restverzoek en het mislukte met 415. Ik zag welk inhoudstype mijn server gebruikt om de api te bereiken. In mijn geval was het “application/json” in plaats van “application/json; charset=utf8”.

Vraag het dus aan uw api-ontwikkelaar en probeer in de tussentijd alleen een verzoek te verzenden met content-type= “application/json”.


Antwoord 13

Ik had hetzelfde probleem. Mijn probleem was een ingewikkeld object voor serialisatie. Een kenmerk van mijn object was Map<Object1, List<Object2>>.
Ik heb dit kenmerk gewijzigd zoals List<Object3>waarbij Object3Object1en Object2bevat en alles goed werkt.


Antwoord 14

Ik weet dat dit veel te laat is om de OP te helpen met zijn probleem, maar voor ons allemaal die dit probleem net tegenkomen,
Ik had dit probleem opgelost door de constructor met parameters van mijn klasse te verwijderen die bedoeld waren om de json-gegevens te bevatten.


Antwoord 15

MappingJackson2HttpMessageConverter handmatig toevoegen in de configuratie loste het probleem voor mij op :

@EnableWebMvc
@Configuration
@ComponentScan
public class RestConfiguration extends WebMvcConfigurerAdapter {
    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> messageConverters) {
        messageConverters.add(new MappingJackson2HttpMessageConverter());
        super.configureMessageConverters(messageConverters);
    }
}

Antwoord 16

De reden kan zijn dat u niet “annotatiegestuurd” toevoegt aan uw xml-bestand van de dispatcherservlet. en het kan ook te wijten zijn aan het niet toevoegen als application/json in de headers


Antwoord 17

Ik heb dit probleem ook ondervonden bij het werken met de REST-service met een JSON-verzoek en het reageert met een HTTP 415 “Niet-ondersteund mediatype”-fout.
Deze coderegels helpen u het probleem op te lossen.

headers: { “Content-Type”: “application/json”, “accept”: “/” },

Daarna moet u code schrijven om de JSON-body te coderen.
Bijvoorbeeld,

body: jsonEncode({“gebruikersnaam”: gebruikersnaam, “wachtwoord”: wachtwoord})


Antwoord 18

Als je een postverzoek doet via Postman, zorg er dan voor dat je deze 2 opties hebt gekozen

1.JSONmoet worden gekozen

2. Inhoudstype– applicatie/json

Other episodes