如何从Java客户端与ASP.net Web API应用程序集成

时间:2014-03-04 18:10:45

标签: java asp.net asp.net-web-api client-side

我正在尝试从Java客户端使用我的ASP.net Web API应用程序中的JSON。

我可以从.net客户端轻松完成此操作。但无法想出在JAVA中做到这一点的方法。我在网上搜索无济于事。

真诚地感谢任何帮助。

这是控制器代码。

  public class OrderController : ApiController
  {
     private SuperiorPizzaEntities1 db = new SuperiorPizzaEntities1();

     // GET api/Order
     public IEnumerable<Order> GetOrders()
     {
        List<Order> orders = db.Orders.ToList();
        return orders;
     }

... More controller methods here.
  }


    /// Orders Class

    public partial class Order
    {
        public Order()
        {
            this.OrderDetails = new HashSet<OrderDetail>();
        }

        public int OrderID { get; set; }
        public int UserID { get; set; }
        public System.DateTime CreatedDate { get; set; }

        public virtual UserAddress UserAddress { get; set; }
        public virtual ICollection<OrderDetail> OrderDetails { get; set; }
    }

遵循Java客户端代码。 这是我为了尝试破译JSON而编写的代码

/// Java code
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.lang.Object;
import java.net.HttpURLConnection;
import java.net.URL;
import javax.json.*;
import javax.json.stream.*;
import javax.json.stream.JsonParser.Event;

public class JSONReader {

public static void main(String[] args) {
    try {
        URL url = new URL("http://MyServer/WebAPIs/api/Order");
        InputStream is = url.openStream();
        JsonParser parser = Json.createParser(is); 
        {
            while (parser.hasNext()) 
            {
                 Event e = parser.next();
                 if (e == Event.KEY_NAME) 
                 {
                     switch (parser.getString()) 
                     {
                         case "name":
                                    parser.next();
                                    System.out.print(parser.getString());
                                    System.out.print(": ");
                                    break;
                         case "message":
                                    parser.next();
                                     System.out.println(parser.getString());
                                     System.out.println("---------");
                                     break;
                         default:
                                     //parser.next();
                                     System.out.println(parser.getString());
                                     System.out.println("---------");
                                     break;   
                              }
                          }
                      }
                  }
              } 
       catch(IOException exc) 
       {
           System.out.println("There was an error creating the HTTP Call: " +                      exc.toString());
       }
   }

再次感谢

1 个答案:

答案 0 :(得分:0)

我会试图摆脱Json的手动解析。我使用Google GSON库将JSON序列化为实际的java类实例。这是一个简单的例子。

// standard import statements
// ....
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;

public class MyItem
{
    public String name;
    public String message;
}

/// ... calling code

Gson gson = new Gson();

// hypotehtical call to HTTP endpoint for JSON
String fullJSONListText = getFullJSONFromURL(); 

// JSON array example e.g: [{name: 'test', message: 'hello}, ...]
Type listType = new TypeToken<List<MyItem>>(){}.getType();

List<MyItem> results = gson.fromJson(fullJSONListText, listType);

//JSON object example
// hypotehtical call to another HTTP endpoint again
String fullJSONObjectText = getFullJSONObjectFromURL(); 

Type objType =  new TypeToken<MyItem>(){}.getType();

MyItem result = gson.fromJson(fullJSONObjectText, objType);