有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java中jersey中使用json对象数组的web服务

要在jersey中使用单个对象,我有如下方法

 @POST
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
@Produces(MediaType.APPLICATION_JSON)
public Response postPerson(MultivaluedMap<String, String> personParams){
    ResponseBuilder response = Response.ok();
    return response.build();
    }

    its working well.

我的疑问是,我如何才能使用泽西岛上的物品列表

    some thing like this 



 @POST
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
@Produces(MediaType.APPLICATION_JSON)
    public Response postPerson(List<Person> person){

     ResponseBuilder response = Response.ok();
    return response.build();

      }

我在谷歌上搜索了一下,但没有找到任何有效的例子


共 (2) 个答案

  1. # 1 楼答案

    我使用jersy作为restfulwebservice,使用angularJS同时发布所有todo对象使用person对象同时更新数据

    //Define an angular module for our app
    var sampleApp = angular.module('sampleApp', ['ngRoute','ngResource']);
    
    sampleApp.config(['$routeProvider',
      function($routeProvider) {
        $routeProvider.
          when('/AddNewOrder', {
            templateUrl: 'add_order.jsp',
            controller: 'AddOrderController'
        }).
    when('/TestArray', {
            templateUrl: 'list.html',
            controller: 'TestArrayController'
        }).    
    
    
    
          }).
          otherwise({
            redirectTo: '/AddNewOrder'
          });
    }]);
    sampleApp.controller( 'TestArrayController', function ( $scope, $location,$http,$resource) {
    
    var array=new Array();
    var postObject1 = new Object();
    postObject1.description = "testDesc1";
    postObject1.summary = "testSummary1";
    array.push(postObject1);
    var postObject2 = new Object();
    postObject2.description = "testDesc2";
    postObject2.summary = "testSummary2";
    array.push(postObject2);
    
    $http.post("/AngularJS/JerseyWebService/todo/arrayTest", array).success(function(data){
        //Callback function here.
        //"data" is the response from the server.
        $scope.updateMessage=data;
    });
    

    HTML页面

    <html lang="en">
      <head>
        <title>AngularJS Routing example</title>
        <script src="jquery.min.js" type="text/javascript" language="javascript"></script>
        <script src="xml2json.js" type="text/javascript" language="javascript"></script>
        <script src="angular.js"></script>
        <script src="angularjs/angular-route.js"></script>
        <script src="angularjs/angular-resource.js"></script>
        <script src="app1.js"></script>    
        <script type="text/javascript">
         var jquery = $.noConflict();
    </script>
      </head>
    
      <body ng-app="sampleApp">
    
        <div class="container">
            <div class="row">
            <div class="col-md-3">
                <ul class="nav">
                    <! <li><a href="#AddNewOrder"> Add New Order </a></li>
                    <li><a href="#ShowOrders"> Show Orders</a></li> >
                    <li><a href="#TestArray">Test Array Update</a></li>
    
                </ul>
                <div>{{updateMessage}}</div>
            </div>
            <div class="col-md-9">
                <div ng-view></div>
            </div>
            </div>
        </div>
    
    
      </body>
    </html>
    

    JersyWebService

    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.List;
    
    import javax.ws.rs.Consumes;
    import javax.ws.rs.FormParam;
    import javax.ws.rs.GET;
    import javax.ws.rs.POST;
    import javax.ws.rs.Path;
    import javax.ws.rs.Produces;
    import javax.ws.rs.QueryParam;
    import javax.ws.rs.core.MediaType;
    
    @Path("/todo")
    public class TodoResource {
    
        @POST
        @Path("/arrayTest")
        @Consumes({ MediaType.APPLICATION_JSON })
        @Produces({ MediaType.APPLICATION_JSON })
    
        public String wantsJSONArray(List<Todo> array)
        {
    
            System.out.println("                         -"+array);
            // here's your array
            return "success";
    
        }
    
    }
    

    待办事项。爪哇

    import javax.xml.bind.annotation.XmlRootElement;
    
    @XmlRootElement
    // JAX-RS supports an automatic mapping from JAXB annotated class to XML and JSON
    // Isn't that cool?
    public class Todo {
      private String summary;
      private String description;
      public String getSummary() {
        return summary;
      }
      public void setSummary(String summary) {
        this.summary = summary;
      }
      public String getDescription() {
        return description;
      }
      public void setDescription(String description) {
        this.description = description;
      }
    public String toString(){
        return "{summary:"+summary+"description:"+description+"}";
    }
    
    } 
    

    网络。xml条目

    <servlet>
    <servlet-name>JerseyWebService</servlet-name>
    <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
    <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
    <servlet-name>JerseyWebService</servlet-name>
    <url-pattern>/JerseyWebService/*</url-pattern>
    </servlet-mapping>
    
  2. # 2 楼答案

    您似乎希望以列表的形式传递表单数据:

    @POST
    @Consumes(MediaType.APPLICATION_FORM_URLENCODED)
    @Produces(MediaType.APPLICATION_JSON)
        public Response postPerson(@FormParam("person") List<String> person){
    
         ResponseBuilder response = Response.ok();
        return response.build();
    
          }
    
    <html><body>
    <form action="http://localhost:9998/myresource" method="POST">
    <input type="checkbox" name="person" value="a">A</input>
    <input type="checkbox" name="person" value="b">B</input>
    <input type="checkbox" name="person" value="c">C</input>
    <input type="submit">OK</input>
    </form>
    </body></html>
    

    类似地,对于Person对象,必须映射different属性,以便它可以发布personlist 资料来源:JERSEY RESTful - How to work with multiselect checkboxes?这对我来说很有效