将数据作为Angular JS中的表单数据发布到Java REST Web服务时出现问题

Vivek Vardhan

我正在尝试创建一个Java接受两个列表作为FormData参数的Web服务

我已经使用了这个答案中http提到的Angualr JS服务

var queryRequest = $http({
    method:'POST',
    url:'services/test/testPath',
    data:$.param({"listA":myList1,"listB":myList2}),
    headers: {'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8'}
});

我的对象 myList1

var myList1=[];
var obj={};
obj["val1"]=1
obj["val2"]=2
myList1.push(obj);

我的对象 myList2

var myList2=[];

var obj={};
obj["val11"]=3
obj["val12"]=4
myList2.push(obj);

var obj={};
obj["val11"]=5
obj["val12"]=6
myList2.push(obj);

我正在使用javax.ws.rs.*其余服务

我的接受数据的Java服务器端点为-

@Path("testPath")
@POST
@Consumes("application/x-www-form-urlencoded;charset=UTF-8")
@Produces("application/json")
public DataDTO addIssuancesForFP(@FormParam("listA") List<TypeA> list1, @FormParam("listB") List<TypeB> list2) {

    System.out.println("Service is called correctly");
    return service.getDTO(list1,list2);
}

我的班级'TypeA'

 private Integer val1;
 private Integer val2;
 //getters and setters, and default constructor

我的班级'TypeB'

 private Integer val11;
 private Integer val12;
 //getters and setters, and default constructor

端点命中正确,但我都进入null了两个列表。请求结构为:

请求类型

    Accept:application/json, text/plain, */*
    Content-Type:application/x-www-form-urlencoded;charset=UTF-8

表格数据

    listA[0][val1]:1
    listA[0][val2]:2

    listB[0][val11]:3
    listB[0][val12]:4
    listB[1][val11]:5
    listB[1][val12]:6

看来是正确的,我认为错误在于服务器部分。如何解决呢?

谢谢

注意:这只是模拟数据,格式完全相同

保罗·萨姆索塔

是的,所以我认为使用表单编码数据不会起作用。原因是它主要用于键值对,形式为

key1=value7&key2=value2&key3=value3...

您正在执行的操作仅使用两个键,listAlistB因此,想象一下发送整个列表所需的值是什么样的。不好看 对于复杂数据,以JSON之类的格式发送数据更为可行。针对您的特定用例的问题是,需要发送两个不相关的对象(或数组)。为此,一种解决方案是使用多部分。您很幸运,因为我昨天刚刚发布了一个较晚的答案,说明了如何使用Angular进行处理。

我不会在这里对代码进行解释。一切都在该链接中说明。在阅读此答案时,请仔细阅读。我将使用Jersey和JAX-RS实现(链接中的示例也是如此-但它还提供其他替代实现)

资源资源

import java.util.List;
import javax.ws.rs.Consumes;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import org.glassfish.jersey.media.multipart.FormDataParam;

@Path("/form")
public class FormResource {

    @POST
    @Consumes("multipart/form-data")
    @Produces("text/plain")
    public String addIssuancesForFP(@FormDataParam("listA") List<TypeA> list1, 
                                     @FormDataParam("listB") List<TypeB> list2) {

        StringBuilder response = new StringBuilder();
        for(TypeA a: list1) {
            response.append(a.toString()).append("; ");
        }

        for (TypeB b: list2) {
            response.append(b.toString()).append("; ");
        }

        System.out.println("Service is called correctly");
        return response.toString();
    }
}

角度的

<!DOCTYPE html>
<html ng-app="formApp">
    <head>
        <title>TODO supply a title</title>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <script src="js/libs/jquery/jquery.js"></script>
        <script src="js/libs/angular.js/angular.js"></script>
        <script>
            angular.module("formApp", [])
            .controller("defaultCtrl", function($scope, $http) {
                $scope.sendData = function() {
                    var myList1 = [];
                    var obj = {};
                    obj["val1"] = "value1";
                    obj["val2"] = "value2";
                    myList1.push(obj);

                    var myList2 = [];

                    var obj = {};
                    obj["val11"] = "value11";
                    obj["val12"] = "value12";
                    myList2.push(obj);

                    var obj = {};
                    obj["val11"] = "value211";
                    obj["val12"] = "value212";
                    myList2.push(obj);

                    var list1 = JSON.stringify(myList1);
                    var list2 = JSON.stringify(myList2);

                    var boundary = Math.random().toString().substr(2);
                    var header = "multipart/form-data; charset=utf-8; boundary=" + boundary;

                    $http({
                        url: "/api/form",
                        headers: {"Content-Type": header},
                        data: createRequest(list1, list2, boundary),
                        method: "POST"
                    }).then(function(response) {
                        $scope.result = response.data;
                    });

                    function createRequest(list1, list2, boundary) {
                        var multipart = "";
                        multipart += "--" + boundary
                            + "\r\nContent-Disposition: form-data; name=listA"
                            + "\r\nContent-type: application/json"
                            + "\r\n\r\n" + list1 + "\r\n";
                        multipart += "--" + boundary
                            + "\r\nContent-Disposition: form-data; name=listB"
                            + "\r\nContent-type: application/json"
                            + "\r\n\r\n" + list2 + "\r\n";
                            multipart += "--" + boundary + "--\r\n";
                        return multipart;
                    }
                };
             });
        </script>
    </head>
    <body>
        <div ng-controller="defaultCtrl">
            <button ng-click="sendData()">Send</button>
            <p>{{result}}
        </div>
    </body>
</html>

结果

TypeA{val1=value1, val2=value2}; 
TypeB{val1=value11, val2=value12}; 
TypeB{val1=value211, val2=value212};

这是预料之中的,因为我刚刚从toString()方法中构建了一个字符串,并在TypeATypeB类中实现了这些方法

public class TypeA {
    public String val1;
    public String val2;
    @Override
    public String toString() {
        return "TypeA{" + "val1=" + val1 + ", val2=" + val2 + '}';
    }
}

public class TypeB {
    public String val11;
    public String val12;
    @Override
    public String toString() {
        return "TypeB{" + "val1=" + val11 + ", val2=" + val12 + '}';
    } 
}

希望这可以帮助。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Moodle REST Web服务:发送数组作为POST参数时出现问题

来自分类Dev

服务人员在获取数据时出现问题

来自分类Dev

将表单数据发布到服务器(Android)

来自分类Dev

从curl将数据发布到Firestore时出现问题

来自分类Dev

通过jQuery Ajax同时发布数组和表单数据时出现问题

来自分类Dev

使用Ajax提交表单数据时出现问题

来自分类Dev

如何通过REST将新人的表单数据发布到Pipedrive(API)

来自分类Dev

向ii2中的控制器发送表单数据时出现问题

来自分类Dev

在控制器中接收表单数据时出现问题。C#-MVC

来自分类Dev

如何使用angular.js从Java REST服务发布数据

来自分类Dev

将mysql数据库与基于Java的Web应用程序链接时出现问题

来自分类Dev

React|Rest API:将表单数据存储到 REST API 上的对象中

来自分类Dev

解码返回的JSON数据作为对象时出现问题

来自分类Dev

解码返回的JSON数据作为对象时出现问题

来自分类Dev

docker-compose在将teampeak数据目录作为卷安装时出现问题

来自分类Dev

访问XML数据时出现问题

来自分类Dev

尝试获取数据时出现问题

来自分类Dev

将HTML表单数据发送到Spring REST Web服务

来自分类Dev

将AWS SDK部署到实时服务器时出现问题

来自分类Dev

将现有Blob复制到Azure媒体服务时出现问题

来自分类Dev

连接到远程服务器并执行简单的数据库查询时出现问题

来自分类Dev

接收数据包速度过快时,C#服务器出现问题

来自分类Dev

沿某些表单数据发布图像 Retrofit to WCF Rest

来自分类Dev

将数据从Android应用发布到PHP网站时出现问题

来自分类Dev

Angular 中的 $http 如何从表单数据发布到 nodejs

来自分类Dev

如何将多部分表单数据从android发布到web api?

来自分类Dev

Python:将数据写入bootstrapTable时出现问题

来自分类Dev

将数据保存到UserDefaults时出现问题

来自分类Dev

将数据传回ViewController时出现问题

Related 相关文章

  1. 1

    Moodle REST Web服务:发送数组作为POST参数时出现问题

  2. 2

    服务人员在获取数据时出现问题

  3. 3

    将表单数据发布到服务器(Android)

  4. 4

    从curl将数据发布到Firestore时出现问题

  5. 5

    通过jQuery Ajax同时发布数组和表单数据时出现问题

  6. 6

    使用Ajax提交表单数据时出现问题

  7. 7

    如何通过REST将新人的表单数据发布到Pipedrive(API)

  8. 8

    向ii2中的控制器发送表单数据时出现问题

  9. 9

    在控制器中接收表单数据时出现问题。C#-MVC

  10. 10

    如何使用angular.js从Java REST服务发布数据

  11. 11

    将mysql数据库与基于Java的Web应用程序链接时出现问题

  12. 12

    React|Rest API:将表单数据存储到 REST API 上的对象中

  13. 13

    解码返回的JSON数据作为对象时出现问题

  14. 14

    解码返回的JSON数据作为对象时出现问题

  15. 15

    docker-compose在将teampeak数据目录作为卷安装时出现问题

  16. 16

    访问XML数据时出现问题

  17. 17

    尝试获取数据时出现问题

  18. 18

    将HTML表单数据发送到Spring REST Web服务

  19. 19

    将AWS SDK部署到实时服务器时出现问题

  20. 20

    将现有Blob复制到Azure媒体服务时出现问题

  21. 21

    连接到远程服务器并执行简单的数据库查询时出现问题

  22. 22

    接收数据包速度过快时,C#服务器出现问题

  23. 23

    沿某些表单数据发布图像 Retrofit to WCF Rest

  24. 24

    将数据从Android应用发布到PHP网站时出现问题

  25. 25

    Angular 中的 $http 如何从表单数据发布到 nodejs

  26. 26

    如何将多部分表单数据从android发布到web api?

  27. 27

    Python:将数据写入bootstrapTable时出现问题

  28. 28

    将数据保存到UserDefaults时出现问题

  29. 29

    将数据传回ViewController时出现问题

热门标签

归档