当前位置: 首页 > 知识库问答 >
问题:

Spring boot&Jquery 415(不支持的媒体类型)

扈俊健
2023-03-14

我试图在安全上下文中对spring rest web服务API执行ajax跨域post调用。在Jquery中,我无法设置contentType属性,因为安全上下文有问题。但是如果没有来自spring的contentType,我会收到以下响应:415(不支持的媒体类型)

Spring控制器:

@RequestMapping(value = "/all", method = RequestMethod.POST)
    @PreAuthorize("hasAnyAuthority('PROF1','SUDO')")

jQuery:

function getAllUsers(){
    var obj = {"limit":10,"page":0};
     $.ajax({
         url:"https://webServerSite/myService/api/v1/user/all",
         dataType: 'json',
         xhrFields: {
             withCredentials: true
          },
         crossDomain: true,
         data:obj,
         type: "post",
         success:function(json){
             var str = JSON.stringify(json);
             console.log(str);
         },
         error:function(xhr, status, error) {
              alert(xhr.responseText);
            }    
    });
}

有一种方法可以在Spring上禁用contentType检查?我的所有数据都是json,我希望将其设置为默认值,避免内容类型头检查。我尝试定义一个自定义消息转换器,但使用以下代码没有工作:

@Override
    public void configureContentNegotiation(ContentNegotiationConfigurer configurer) {

        //set path extension to true
        configurer.favorPathExtension(true).
        //set favor parameter to false
        favorParameter(false).
        //ignore the accept headers
        ignoreAcceptHeader(true).
        //dont use Java Activation Framework since we are manually specifying the mediatypes required below
        useJaf(false).
        defaultContentType(MediaType.APPLICATION_JSON).
        mediaType("xml", MediaType.APPLICATION_XML).
        mediaType("json", MediaType.APPLICATION_JSON);
      }

共有1个答案

督德明
2023-03-14

您可以使用@requestmapping注释和consumes字段指定controller方法接受的内容类型。对于您的用例,您可以考虑接受以下所有内容类型:

import org.springframework.http.MediaType;

@RequestMapping(value = "/all", method = RequestMethod.POST, consumes = {MediaType.ALL_VALUE})

更新:

您不应该禁用头检查,否则,服务器不知道哪个内容类型是传入的,以及如何正确解析它。

考虑到堆栈跟踪,我认为错误来自不同的来源。尝试解析传入的应用程序/x-www-form-urlencoded;charset=utf-8转换为@requestbody,这在Spring中是不可能的。

这个问题已经在另一个地方得到了回答:内容类型为application/x-www-form-urlencoded的Http Post请求在Spring中不起作用

 类似资料:
  • 问题内容: 自数小时以来,我一直在尝试纠正http错误,但它仍显示不支持的页面。我在邮递员中添加标题。 这是我的Java代码 这是我的档案 问题答案: 通过和如何在响应流和请求流之间对对象进行序列化和反序列化。 将会发生的是,将从提供者的注册表中进行搜索,以查找可以处理的媒体类型。如果找不到,则Jersey无法处理该请求,并将发送415不支持的媒体类型。通常,你还应该在服务器端记录一个异常。不知道

  • 我已经创建了一个示例web服务来进行post调用。 我使用的是Jersey JAX-RS和Maven。

  • 我正在用Spring Boot构建一些API,但是当我试图用Postman查询时,我得到了一些关于Content-Type的错误。 我不明白哪里出了问题。 我注意到错误消失时,我删除了@刚体作为参数的方法。为什么啊? 我只想: 将XML发送到API

  • 问题内容: 我正在尝试使用jQuery 1.6(Jackson 2.1.1 和Spring 3.2.0 )通过JSON通过该方法向数据库中插入和/或更新数据。 JS代码如下。 通过URL映射的Spring控制器内部的方法如下。 服务器按照问题的含义进行响应, 415不支持的媒体类型 标头信息如下所示。 整个文件如下。 当我删除一个方法参数并仅用于接受请求参数时,它可以工作。 问题答案: 浏览器发送

  • 问题内容: 我正在使用Spring 3.2,并尝试使用ajax发布请求来提交json对象数组。如果相关,我转义了所有特殊字符。 我的HTTP状态为415。 我的控制器是: jQuery是: 我发布的数组中的对象之一的示例是以下json: 错误是: 为什么会发生此错误-有人知道吗? 问题答案: 您可以尝试使用。它没有任何问题

  • 我试图使用BlueJeans API来创建一个客户端应用程序,https://github.com/bluejeans/api-rest-meetings/blob/master/libs/python/docs/ApplicationApi.md#create_client_application.我已经获得了一个客户端ID和秘密以及用户ID,并将它们保存在我的Django设置中。我还编写了一个

  • 我有一个问题,当我需要插入用户到Keycloak时,我出现了以下错误: 消息:“http failure response for http://localhost:8080/auth/admin/realms/demo/clients:415 Unsupported Media type”名称:“httperrorresponse”确定:false状态:415 statusText:“Unsup