我使用这个Jersey注释的Rest消费者POJO而没有任何关于http的问题,但后来我们不得不开始通过HTTPS部署我们的应用程序 . 我得到了一个很大的胖404,我得出结论,其他一切都在代码中运行(它顺利运行在MULE上)并且我的POJO根本不消耗HTTPS请求 . 我怀疑

  • 我运气不好, Jersey 不会说https而我必须在这里重做一些东西或者将部分恢复为http

  • 我添加了一个非常小的注释和voiala!都好 . 显然,希望2.在这里 . 这是代码:

包org.acme.api;

import java.net.UnknownHostException; import java.util.List;

import javax.ws.rs.DELETE; import javax.ws.rs.GET; import javax.ws.rs.PUT; import javax.ws.rs.Path; import javax.ws.rs.POST; import javax.ws.rs.PathParam; import javax.ws.rs.HeaderParam; import javax.ws.rs.Produces; import javax.ws.rs.core.Response;

import com.mongodb.BasicDBObject; import com.mongodb.BasicDBList; import com.mongodb.DBCollection; import com.mongodb.DBCursor; import com.mongodb.MongoClient; import com.mongodb.ServerAddress; import com.mongodb.DBObject; import com.mongodb.WriteResult; import com.mongodb.util.JSON; import com.mongodb.DB;

/ **

  • REST Web服务实现 .

  • @author menashe@acme.org * /

@路径(”/”)

公共产品{

MongoClient客户端= null; DB db = null; DBCollection products = null;

public Product()抛出UnknownHostException {this.client = new MongoClient(new ServerAddress(“localhost”,27027)); this.db = this.client.getDB(“dailysale”); this.products = this.db.getCollection(“products”); }

@GET @Produces(“application / json”)@ Path(“/ product / ”)public String retrieveProduct(@PathParam(“productId”)Integer productId){

String product;

try{

    DBObject query = new BasicDBObject("productId", String.valueOf(productId));
    product = this.products.findOne(query).toString();

} catch(Exception e) {

    product = "{ error: 'We were not able to find product with Id: '" + productId + ". " + e.getLocalizedMessage() + " }";
}

return product;

}

@GET @Produces(“application / json”)@ Path(“/ product / grid / ”)@HeaderParam(“range”)public Response listProducts(@HeaderParam(“range”)字符串范围,@ PathParam(“ query“)字符串查询){

Integer pageNum = 1;
Integer pageSize = 10;

Integer resultCount = null; 

BasicDBList result = new BasicDBList();

Integer firstItem = (pageNum - 1 ) * pageSize;

Long allProductsCount = null;

Integer lastItem = null;

DBObject searchQuery = new BasicDBObject("$regex", query);

try {
    DBCursor productListCursor = products.find(searchQuery).skip(firstItem).limit( pageSize );

    List<DBObject>  productList = productListCursor.toArray();

    for(DBObject product : productList) { 

        result.add(this.itemToGridConverter(product));

    }

    resultCount = productList.size();

    allProductsCount = products.count();

    lastItem = firstItem + resultCount - 1;

} catch(Exception e) {

    result = new BasicDBList();
    result.add(new BasicDBObject("error", "We were not able to retrieve all products with pageSize: " + pageSize + " and pageNumber " + pageNum + ". " + e.getLocalizedMessage() ));

}

return Response.ok(result).header("Content-Range",  "items " + firstItem + "-" + lastItem + "/" + allProductsCount).build();

}

@GET @Produces(“application / json”)@ Path(“/ product / grid /”)@HeaderParam(“range”)public Response listProducts(@HeaderParam(“range”)String range){

Integer pageNum = 1;
Integer pageSize = 10;

Integer resultCount = null; 

BasicDBList result = new BasicDBList();

Integer firstItem = (pageNum - 1 ) * pageSize;

Long allProductsCount = null;

Integer lastItem = null;

try {
    DBCursor productListCursor = products.find().skip(firstItem).limit( pageSize ).sort( new BasicDBObject( "sku", 1)) ;

    List<DBObject>  productList = productListCursor.toArray();

    for(DBObject product : productList) { 

        result.add(this.itemToGridConverter(product));

    }

    resultCount = productList.size();

    allProductsCount = products.count();

    lastItem = firstItem + resultCount - 1;

} catch(Exception e) {

    result = new BasicDBList();
    result.add(new BasicDBObject("error", "We were not able to retrieve all products with pageSize: " + pageSize + " and pageNumber " + pageNum + ". " + e.getLocalizedMessage() ));

}

return Response.ok( result ).header("Content-Range",  "items " + firstItem + "-" + lastItem + "/" + allProductsCount).build();

}

@GET @Produces(“application / json”)@ Path(“/ product / grid /?”)@HeaderParam(“range”)public Response listProductsWithSort(@HeaderParam(“range”)字符串范围,@ PathParam( “sort”)字符串排序){

Response response = null;

return response;

}

@PUT @Produces(“application / json”)@ Path(“/ product”)public String createProduct(String productJson){DBObject product = null;字符串结果; try catch(例外e){result =“{错误:'我们无法插入产品 . ' “e.getLocalizedMessage()”}“; }

return result;

}

@POST @Produces(“application / json”)@ Path(“/ product / ”)public String updateProduct(@PathParam(“productId”)Integer productId,String productJson){DBObject product = null; DBObject query = new BasicDBObject(); String result = null; try {product =(DBObject)JSON.parse(productJson); query.put(“productId”,productId.toString()); WriteResult wResult = this.products.update(query,product); result = wResult.toString(); } catch(例外e){result =“{错误:'我们无法更新产品 . ' “e.getLocalizedMessage()”}“; }

return result;

}

@DELETE @Produces(“application / json”)@ Path(“/ product / ”)public String deleteProduct(@PathParam(“productId”)Integer productId){

return "{ error: 'This function is not implemented [delete].' }";

}

private DBObject itemToGridConverter(DBObject product){DBObject item = new BasicDBObject(); BasicDBList images =(BasicDBList)product.get(“images”); BasicDBObject firstImage =(BasicDBObject)images.get(0);

item.put("productId", product.get("productId"));
item.put("sku", product.get("sku"));
item.put("image", firstImage.get("imageurl"));

BasicDBList spec = (BasicDBList)product.get("productSpecifics");
BasicDBObject firstSpec = (BasicDBObject)spec.get(0);

BasicDBObject attributes = (BasicDBObject)product.get("productAttributes");
item.put("name", firstSpec.get("title"));
item.put("cost", "no source");
item.put("list_price", attributes.get("defaultsalePrice"));
item.put("qty_available", product.get("qtyonHand"));
item.put("condition", "no source");
item.put("active", "true".equals(product.get("active")) ? "Yes" : "No");
item.put("manufacturer", attributes.get("manufacturer"));
item.put("part_number", attributes.get("manufacturerPartNumber"));
item.put("date_created", product.get("_id"));
return item;

}

}

非常感谢 .

UPDATE:

我通过修复路径修复了这个问题 . 问题是MULE如何解析范围边界,这里原始的@Path /实际上是在前一个范围内 . 现在我们改变了流程,@ Path变成了/ controllers / . Uyodiin Mevin .