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

对SpringRESTAPI 415的Ajax请求错误

东郭阳德
2023-03-14

我的Spring Rest控制器有问题。我试图发布(PUT)数据从我的客户端(angularJS)到我的服务器(Spring),但每次我试图发送的东西我得到一个415媒体不支持错误。

有了Maven,我在SpringAPI中添加了JacksonCore(2.6.3)JacksonDataBind(2.6.3)。我还使用@EnableWebMvc自动将Jackson消息转换器添加到Spring。在我的Spring控制器中,我使用@RestController访问Spring的REST方法

我的REST API控制器:

@RequestMapping(value = "/location/update/{id}", method = RequestMethod.PUT, consumes = MediaType.APPLICATION_JSON_VALUE)
public RippleUser updateUserLocation(@PathVariable("id") Integer id, @RequestBody RippleUser user) {
    return user;
}

我尝试过不同类型的消费:

  • MediaType.APPLICATION_JSON_VALUE
  • 应用/json
  • 无消耗
  • 等等

我的RippleUser模型(部分)

@Entity
@Table(name = "user")
@JsonRootName(value = "user")
public class RippleUser implements Serializable {

    @NotNull
    @Column(name = "active", nullable = false)
    private boolean activeUser;

    @Column(name = "latitude", nullable = true)
    private Float lattitude;

    @Column(name = "longitude", nullable = true)
    private Float longitude;

    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "lastActive", nullable = true)
    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd-MM-yyyy HH:mm:ss")
    private Date timestamp;
}

在这个模型中,我拥有所有必要的getter和setter。

我的AngularJS客户:

 httpService.updateInBackend = function (url, data, callback, errorCallback) {
                http.put(url, data)
                        .then(function successCallback(response) {
                            callback(response.data);
                        }, function errorCallback(response) {
                            errorCallback(response);
                        });
            };

URL:http://server:port/app/location/update/{id}

数据:

params: {
    {
        "user": {
            "latitude": 52.899370,
            "longitude": 5.804548,
            "timestamp": 1449052628407
        }
    }
};

对于这个方法,我还添加了@JsonRootName(value="user")到我的RippleUser模型中。

我也尝试过没有用户属性(也从我的模型中删除了它):

params: {
    {
        "latitude": 52.899370,
        "longitude": 5.804548,
        "timestamp": 1449052628407
    }
};

AngularJS HTTP方法(PUT、POST、DELETE、GET等)检查参数中的类型并自动设置正确的头。

镀铬邮递员

只是为了确保我在Chrome Postman插件中也尝试过这种方法

超文本传输协议:端口/应用/位置/更新/2

方法:PUT

标题:内容类型:应用程序/json

正文:

{
    "latitude": 52.899370,
    "longitude": 5.804548,
    "timestamp": 1449052628407
}

给出的错误是:

HTTP Status 415 The server refused this request because the request entity is in a format not supported by the requested resource for the requested method.

使现代化

当我将@ResponseBody从RippleUser更改为String时,我可以在RestController中接收信息:

@RequestMapping(value = "/location/update/{id}", method = RequestMethod.PUT, consumes = MediaType.APPLICATION_JSON_VALUE)
public RippleUser updateUserLocation(@PathVariable("id") Integer id, @RequestBody String user) {
    return user;
}

我也尝试发送一个空用户对象但结果在相同的错误消息

我的问题的答案如下。

共有1个答案

杨征
2023-03-14

这段代码的问题与我预期的有点不同。Spring抛出415 media not supported错误,因为它无法用post填充所有必需字段。

我的解决方案是添加一个专门由Spring使用的类,用于在发送和接收数据时进行数据的转换。这个额外类的好处是我可以管理API发送和接收的数据。

用户位置

将以下类添加到我的项目中(使用getters和setters):

public class UserLocation {

    private Float latitude;

    private Float longitude;

    private Date lastActive;
}

此类包含PUT请求所需的所有数据。Spring自动填充所有字段。

控制器

为了使这项工作,我还必须修改我的控制器。新守则如下:

@RequestMapping(value = "/location/update/{id}", method = RequestMethod.PUT)
public UserLocation updateUserLocation(@PathVariable("id") Integer id, @RequestBody UserLocation location) {
    //Find user by ID
    //Add location to user
    //Update the user

    return //the new user
}

希望这对任何人都有帮助

 类似资料:
  • 目标是通过ajax将对象发送到另一台服务器,这是我为CORS设置的,下面是代码。ajax代码片段: 正确发布数据,但使用

  • 问题内容: 我在ajax中执行此请求,但是我仍然遇到以下有关CORS的错误:XMLHttpRequest无法加载https://cubber.zendesk.com/api/v2/organizations/37520251/users.json。在飞行前响应中,Access- Control-Allow-Headers不允许请求标头字段Access-Control-Allow-Origin。您能

  • 问题内容: 为什么Javascript对相对URL与标准HTML有所不同?考虑以下网址(或浏览至该网址):http : //en.wikipedia.org/wiki/Rome。打开Firebug控制台(或另一个Javascript控制台),然后输入以下内容: 在我的系统下,请求被发送到“ http://en.wikipedia.org/wiki/foo ”。URL中的“罗马”将被忽略。URL(“

  • 问题内容: 我一直在Ajax请求上收到400错误请求。我不知道这有什么问题。我正在使用: 控制器: Ajax呼叫: HTTP请求: 响应: 任何想法如何解决这个问题?作为基础,我使用了本教程。我搜索并读取了大多数带有400 Bad Request错误的线程,但这并不能解决我的问题。 编辑:图书课: 编辑2: 问题答案: 我解决了我的问题。为了使它起作用,我做了以下操作:首先,我将依赖关系更改为ja

  • 我想我会在这里问这个问题,因为我不太确定我会错在哪里。我正在尝试使用Django Rest框架类通过AJAX执行POST请求。但是,每当事件触发时,我都会收到以下错误: 这是堆栈跟踪中显示的内容: 上下文 我试图做到这一点,当用户单击“添加到列表”按钮时,它会向用户定义的列表发送一个cafeName(以及最终的其他详细信息)。 我想知道是否有人可以看看我的代码,并给我一些指导,我哪里出了问题? 代

  • 问题内容: 我正在使用PHP从远程服务器下载一个(大)文件,并且此下载是通过单击网页上的下载按钮触发的。 因此,当我单击网页上的按钮时,就会向PHP函数发出请求(带有angulars )。该函数使用触发下载。 同时,我想使用Ajax向我的PHP网站提出其他请求。但是,只要下载正在进行,所有其他Ajax请求都会显示状态。 因此,基本上,下载阻止了对PHP的所有其他请求。有什么办法可以避免这种阻塞?