angularjs - $http.post 方法中的 415(不支持的媒体类型)

标签 angularjs post jpa http-status-code-415

我对 REST 和 AngularJS 还很陌生,但经过几个小时的谷歌搜索后,我找不到任何问题的答案:

我正在尝试从我的 angularjs 前端向用 java 实现的后端(使用 JPA)发出 POST 请求。

当我尝试创建 json 对象并执行 POST 时,我总是收到 415(不支持的媒体类型)错误

(实际上我什至没有“进入”服务的范围(即“IN SERVICE”不会打印到控制台).. 如果我添加 postData.toJSON(),它实际上会得到“POSTed”,但到达 null ...

如何格式化“postData”才能成功发布?

(我也尝试编写没有“””的日期属性 - 没有运气......)

感谢您的帮助!

<小时/>

前端:

app.controller('WorkController', function($scope, $http) {

$scope.saveWork = function () {

    var postData = {
    "status" : "OPEN",
    "startDate": "1338364250000",
    "endDate": "1336364253400",
    "WorkText" : "Test"
    };


    $http.post("http://localhost:8080/service/v1/saveWork", postData)
        .success(function(data, status, headers, config){
            console.log("IN SAVE WORK - SUCCESS");
            console.log(status);
        })
        .error(function(){
            console.log("ERROR IN SAVE WORK!");
        })
}

});

服务:

@POST
@Consumes(MediaType.APPLICATION_JSON)
public Response save(WorkDto wo){
            System.out.println("IN SERVICE");
    if(ass == null){
        System.out.println("Could nor persist work- null");
        return Response.noContent().build();
    } else{
        Work workDao = WorkTransformator.transform(wo);
        workDao.persist();
        return Response.ok().build();
    }
}

最佳答案

不要构建和发送已解析的 JSON 对象,而是创建一个 javascript 对象并将其发送到帖子正文中。您可以重用 postData 对象,但尝试删除属性名称周围的“”。

试试这个:

    var postData = {
        status : "OPEN",
        startDate: "1338364250000",
        endDate: "1336364253400",
        workText : "Test"
};

更新

看起来上面的内容本身并不起作用。我认为 Content-Type 会被推断出来。

您可以尝试以这种方式执行发布请求吗:

    $http({
       method: 'POST',
       url: 'http://localhost:8080/service/v1/saveWork',
       data: postData,
        headers: {
            'Content-Type': 'application/json'
   }}); // complete with your success and error handlers...
        // the purpose is to try to do the post request explicitly
        // declaring the Content-Type you want to send.

更新2

如果这不起作用,请使用 Fiddler 编写一个发布请求,并检查响应是什么。 这里有一些提示:

  • 如果您还没有 Fiddler2,请下载
  • 撰写如下屏幕截图所示的请求

Compose your POST like this

然后您可以在左侧 Pane 中检查服务器响应代码是什么。双击该行(忽略屏幕截图上的错误代码...您应该得到 415)

Double click the line with your request

双击响应行后,您可以在右侧 Pane 中检查并浏览更多详细信息:

You can check the request and response details

如果您可以成功发布“制造的”JSON 对象,那么问题就出在您的 Angular 代码上。如果没有,那么您的 Rest Service 配置肯定有问题。

您还可以在 Fiddler2 中检查使用 Angular 应用程序发布的帖子的详细信息。这应该能让您很好地了解正在发生的事情。

如果您感兴趣,您可以使用 Angular 应用请求的一些屏幕截图来更新您的问题。这肯定会帮助我们帮助您:)

关于angularjs - $http.post 方法中的 415(不支持的媒体类型),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22841528/

相关文章:

javascript - UI-Sortable 带有用于 ng-repeat 的 Angular 过滤器

java - 将 Spring Boot Web 应用程序连接到 postgresql 服务器

java - 我如何使 JPA POJO 类 + Netbeans 表单很好地协同工作?

java - Spring Batch应用程序sqlcode -4499 sqlstate 08001

angularjs - 如何使用 "controller as"语法通过 AngularJS ui-calendar 获取日历对象?

android - 如何在不影响长度较小的数据的情况下减少html css中冗长数据的宽度?

javascript - Angular ng-禁用检查多个值

java - 从 httppost 响应中解析 xml

typescript - 使用 Typescript 的 http 发布请求

asp.net-mvc-3 - MVC3 - 发布时模型字段为空(使用 View 模型)