【问题标题】:How to send java object in angular JS如何在 Angular JS 中发送 java 对象
【发布时间】:2014-08-27 11:02:52
【问题描述】:

我有一个 JS 文件正在尝试执行 POST 方法,但需要一个特定的 java 对象作为输入。

这是服务器中 Post 方法的签名:

@Path("/branches")
public class BranchResource {

@POST
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public Response post(BranchDescriptor branch) {
.
.

这里是 JS 函数(使用 Angular)

$scope.retry = function() {
    $http({
           url : "rest/branches",
           method : "POST",
           dataType : "json",//not sure is needed
           data : "way to get Branch descriptor "
           headers : {
                 "Content-Type" : "application/json; charset=utf-8",
                 "Accept" : "application/json"
           }
    }).success(function(data) {
           $scope.items = data;
    }).error(function(data) {
           alert('err');
    });
 };

我收到以下错误:

??? 27, 2014 3:27:48 PM com.sun.jersey.spi.container.ContainerRequest getEntity
SEVERE: A message body reader for Java class    xxx.api.BranchDescriptor, and Java type class xxx.BranchDescriptor, and MIME media type application/octet-stream was not found.
The registered message body readers compatible with the MIME media type are:
application/octet-stream ->
  com.sun.jersey.core.impl.provider.entity.ByteArrayProvider
  com.sun.jersey.core.impl.provider.entity.FileProvider
  com.sun.jersey.core.impl.provider.entity.InputStreamProvider
  com.sun.jersey.core.impl.provider.entity.DataSourceProvider
  com.sun.jersey.core.impl.provider.entity.RenderedImageProvider
*/* ->

所以,我尝试添加这样的数据:

数据:{ "_protectedBranch" : "pf_something", "_newBranch" : "some_branch", "_commitId" : "some_commit", “_commiter”:“某人” },

并得到以下错误:

??? 27, 2014 3:42:46 PM com.sun.jersey.spi.container.ContainerResponse mapMappableContainerException
SEVERE: The exception contained within MappableContainerException could not be mapped to a response, re-throwing to the HTTP container
org.codehaus.jackson.map.exc.UnrecognizedPropertyException: Unrecognized field "_protectedBranch" (Class xxx.BranchDescriptor), not marked as ignorable
 at [Source: HttpInputOverHTTP@66aee27d; line: 1, column: 22] (through reference chain: xxx.BranchDescriptor["_protectedBranch"])
    at org.codehaus.jackson.map.exc.UnrecognizedPropertyException.from(UnrecognizedPropertyException.java:53)

如何传递 BranchDescriptor 对象进行发送? 我错过了什么?

【问题讨论】:

  • 您尝试做的事情没有多大意义。您不能在(至少是客户端)JS 中创建 Java 对象。请注意,Java 和 JavaScript 没有任何共同之处。您所做的是使用 REST 服务并将所需的属性传递给 Java 函数,然后在 Java 服务器代码中创建对象。
  • 你也可以在控制台分享错误。
  • 这个问题在某种程度上具有误导性。尝试重建。
  • 我编辑了Q,如果更清楚请告诉我

标签: java javascript angularjs http post


【解决方案1】:

好的,发现我遗漏了什么,这只是创建分支并将其发送到http中的数据的一种方式:

var branch = {
            protectedBranch:"some_branch",
            newBranch:"some_branch",
            commitId: "some_commit",
            commiter:"some_commiter"
    }
    $scope.retry = function() {
        $http({
               url : "rest/branches",
               method : "POST",
               data : branch,
               headers : {
                     "Content-Type" : "application/json; charset=utf-8",
                     "Accept" : "application/json"
               }
        }).success(function(data) {
               $scope.items = data;
        }).error(function(data) {
               alert('err');
        });

希望对其他人有所帮助。

【讨论】:

    【解决方案2】:

    您需要像这样在data 中传递一个javascript 对象:data: {param1: param1value, param2: param2value}

    【讨论】:

    • 我试了一下,出现上面的错误,是不是漏了什么?
    【解决方案3】:

    你不需要dataType,你可以尝试发送一个对象而不是这样的字符串:

    $http({
       url : "rest/branches",
       method : "POST",
       data : {branch : "way to get Branch descriptor" },
       headers : {
            "Content-Type" : "application/json; charset=utf-8",
            "Accept" : "application/json"
       }
    })
    

    在文档中:

    $http 服务会自动为所有请求添加特定的 HTTP 标头。

    • 接受:application/json, text/plain, * / *
    • 内容类型:应用程序/json

    Angular js 发送带有上述标头的请求,而 jQuery 发送此标头:

    • '应用程序/x-www-form-urlencoded; charset=UTF-8'

    【讨论】:

    • 我确实尝试过类似的方法,正如您在编辑 Q 中看到的那样。我遗漏了一些东西,如果 is 不是字符串,我如何将分支描述符作为属性传递?
    猜你喜欢
    • 2015-08-18
    • 1970-01-01
    • 2013-10-17
    • 1970-01-01
    • 2015-05-31
    • 2016-11-25
    • 1970-01-01
    • 1970-01-01
    • 2011-06-26
    相关资源
    最近更新 更多