如何在Restful Web服务中从Http Post获取数组?

时间:2015-11-30 09:41:54

标签: java arrays angularjs rest httprequest

我有一个AngularJS Framework的控制器。我使用Http Post Request将数组发送到服务器。如何在java方法中获取此数组?

这是我的控制器

var app = angular.module('myApp', []);
app.controller('myCtrl', function($scope, $http) {

var indici = new Array();

indici.push(1);
indici.push(2);

$http.post("http://localhost:8080/SistemiDistribuiti/rest/Point/Trovati", indici, {
              headers: { 'Content-Type': 'application/json' }
            }).success(function(receivedData, status) {
                $scope.someData = receivedData;
            });

这是我的java课程,但我不知道如何获取我的数组。

import javax.ws.rs.Path;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.POST;
import javax.ws.rs.Consumes;

@Path("Point")
public class PointService {


@POST
@Path("Trovati")
@Consumes(MediaType.APPLICATION_JSON)
public void RetrieveData() {
     //how print my array?
}

3 个答案:

答案 0 :(得分:1)

您必须使用@GET,如下所示:

@GET
@Path("/blabla")
public Response receiveListOfStrings(@QueryParam("list") final List<String> list){
    log.info("receieved list of size="+list.size());
    return Response.ok().build();
}

请求:

GET http://example.com/services/echo?list=balbla&list=asdasd&list=BYE

Post不支持此功能。或者您可以使用复杂类型的@PUT

设置示例:

@PUT
public Response putExample(MyObject obj) {
    log.info("receieved list of size="+obj.getList().size());
    return Response.ok().build();
}

在此举例中,您可以看到我使用了自定义MyObject以下是其代码:

public class MyObject{

    private List<String> list = new ArrayList<String>();

    public List<String> getList(){
        return list;
    }

    public void setList( List<String> list ){
        this.list = list;
    }

    @Override
    public String toString(){
        return "MyObject [list=" + list + "]";
    }

}

正如您所看到的, MyObject 类中的列表属性。因此,您可以通过调用 getList 作为上面的示例来打印任何内容。

答案 1 :(得分:1)

我同意@ lex82,您不会在请求中发送有效负载。请参阅$http.post的文档:https://docs.angularjs.org/api/ng/service/ $ http#post。请务必了解承诺是什么以及如何在Angular的HTTP支持中使用它们。

以下是一个示例:

var dataToSend = {
  // some JSON data
};
$http.post("/some-url", dataToSend, {
  headers: { 'Content-Type': 'application/json' }
}).success(function(receivedData, status) {
        $scope.someData = receivedData;
});

那就是说,你说你没有收到服务器上的数据。首先要检查您的原始请求。这可以使用Chrome开发者工具(CRTL + SHIFT + i)在Chrome中完成。这将允许您访问包含每个请求的“网络”选项卡。单击与您的AJAX请求相对应的请求,并检查您的请求中是否有有效负载。如果是这样,那么您的JAXRS应用程序中的服务器端就会出现问题。

您的JAXRS应用程序中是否存在一些异常?

希望它可以帮到你, 亨利

答案 2 :(得分:1)

Apache有一个http库,可用于发出各种http请求。

div

您还需要一个可用于将json对象转换为Java对象的库。谷歌创建了一个名为gson的库,我将在我的例子中使用它。

<dependency>
      <groupId>org.apache.httpcomponents</groupId>
      <artifactId>httpclient</artifactId>
      <version>4.3.2</version>
  </dependency>

您还必须创建一个代表您的数据的Java对象。这将用于将您的json对象映射到java对象或&#34; pojo&#34;。我不确定您的JSON对象是什么样的,但我将使用一个名为Response的通用示例。

<dependency>
      <groupId>com.google.code.gson</groupId>
      <artifactId>gson</artifactId>
      <version>2.2.4</version>
  </dependency>

您的java对象必须具有与JSON对象相同类型和名称的相同数量的字段。

接下来,您必须编写一个调用角度api的函数。请参阅以下示例:

public class Response
{
    private List<Example> examples;
    private double total;
    private String someString;

    public QuoteResponse()
    {
        super();
    }

    public List<Examples> getExamples() {
        return examples;
    }

    public void setExamples(List<Examples> examples)
    {
        this.examples = examples;
    }

    public double getTotal() {
        return total;
    }

    public void setTotal(double total) {
        this.total = total;
    }

    public String getSomeString() {
        return someString;
    }

    public void setPrint_type(String someString) {
        this.someString = someString;
    }
}

关于它。如果您有任何问题,请告诉我。