【问题标题】:How to Create REST Client, the response should be come in JSP page?如何创建 REST 客户端,响应应该在 JSP 页面中?
【发布时间】:2019-01-14 02:23:33
【问题描述】:

我开发了用 rest 开发的服务器端 web 服务。我的代码在使用 POSTMAN 应用程序检查时工作正常。但我想获得 JSP 页面中所有 CRUD 操作的响应。每个响应都应该显示在 JSP 页面中,并且消费的数据应该是 JSP 页面。您能否提供如何开发 REST 客户端的方法。我是 Rest Client 的新手。

Product.java

public class Product {

private long pid;
private String pname;
private String category;
private float price;
private long stock;
private String remarks;

public Product()
{

}

public Product(long pid,String pname,String category,float price,long stock,String remarks){
    this.pid=pid;
    this.pname=pname;
    this.category=category;
    this.price=price;
    this.stock=stock;
    this.remarks=remarks;
}
public long getPid() {
    return pid;
}
public void setPid(long pid) {
    this.pid = pid;
}
public String getPname() {
    return pname;
}
public void setPname(String pname) {
    this.pname = pname;
}
public String getCategory() {
    return category;
}
public void setCategory(String category) {
    this.category = category;
}
public float getPrice() {
    return price;
}
public void setPrice(float price) {
    this.price = price;
}
public long getStock() {
    return stock;
}
public void setStock(long stock) {
    this.stock = stock;
}
public String getRemarks() {
    return remarks;
}
public void setRemarks(String remarks) {
    this.remarks = remarks;
}

}

DatabaseClass.java

public class DatabaseClass {

private static Map<Long, Product> products=new HashMap<>();

public static Map<Long, Product> getProduct()
{
    return products;
}   

}

ProductDaoImpl.java

public class ProductDaoImpl implements ProductDao {

private Map<Long, Product> products=DatabaseClass.getProduct();

public ProductDaoImpl()
{
    products.put(1L, new Product(1L,"TV","Entertinement",10000F,250L,"This is best TV!"));
    products.put(2L, new Product(2L,"Computer","Technology",20000F,350L,"My Computer name Hp and SONY ViVo!"));
    products.put(3L, new Product(3L,"DeskTopComputer","Technology",15000F,150L,"My Desktop Computer name Accer and SONY ViVo!"));
}

//Get All products
public List<Product> getAllProducts() {

    return new ArrayList<Product>(products.values());
}

//Get product by product id
public Product getProduct(long pid) {

    return products.get(pid);
}

//To Add the products 
public Product addProduct(Product product) {
    product.setPid(products.size()+1);
    products.put(product.getPid(), product);
    return product;
}

//Update the product
public Product updateProduct(Product product) {
    if(product.getPid()<=0)
    {
        return null;
    }
    products.put(product.getPid(), product);
    return product;
}

// Delete the product
public Product deleteProduct(long pid) {

    return products.remove(pid);

}



//Get the product by category
public List<Product> getProductByCategory(String category) {

    List<Product> list = new ArrayList<Product>();

    if (products.size()<=0) {
        return null;
    }

    else{

        for(Product p: this.products.values()){

            if(p.getCategory().equals(category))
                list.add(p);    
        }
        return list;    
    }

}

//Get the product by price
public List<Product> getProductsBasedOnPrice(float startPrice, float endPrice) {

    List<Product> list = new ArrayList<Product>();

    if (products.size()<=0) {
        return null;
    }

    else{

        for(Product p: this.products.values()){

            if(startPrice<=p.getPrice() && endPrice>=p.getPrice())
            {
                list.add(p);    
            }
        }
        return list;    
    }

}}

ProductServiceImpl.java

@Path("/products")

公共类 ProductServiceImpl 实现 ProductService {

ProductDaoImpl productService=new ProductDaoImpl();

@GET
@Produces(MediaType.APPLICATION_XML)
public List<Product> getProducts() {

    return productService.getAllProducts();
}

@GET
@Path("/{pid}")
@Produces(MediaType.APPLICATION_XML)
public Product getProduct(@PathParam("pid") long pid)
{
    return productService.getProduct(pid);
}

@POST
@Produces(MediaType.APPLICATION_XML) 
@Consumes(MediaType.APPLICATION_XML)
public Product addMessage(Product product)
{
    return productService.addProduct(product);
}

@PUT
@Path("/{pid}")
@Produces(MediaType.APPLICATION_XML) 
@Consumes(MediaType.APPLICATION_XML)
public Product updateProduct(@PathParam("pid") long pid,Product product)
{
    product.setPid(pid);
    return productService.updateProduct(product);
}

@DELETE
@Path("/{pid}")
@Produces(MediaType.APPLICATION_XML) 
public void deleteMessage(@PathParam("pid") long pid)
{
    productService.deleteProduct(pid);
}

@GET
@Path("category/{category}")
@Produces(MediaType.APPLICATION_JSON)
public List<Product> getProductsBasedOnCategory(@PathParam("category") String category) {

    return productService.getProductByCategory(category);
}


@GET
@Path("basedOnPrice")
@Produces(MediaType.APPLICATION_JSON)
public List<Product> getProductsBasedOnPrice(@QueryParam("startPrice") float startPrice, @QueryParam("endPrice") float endPrice) {
            if(startPrice>0 && endPrice>0)
            {
            return productService.getProductsBasedOnPrice(startPrice, endPrice);    
            }
    return productService.getAllProducts();
}

}

【问题讨论】:

  • 如果你想要rest api文档集成swagger api。

标签: java rest jsp rest-client advanced-rest-client


【解决方案1】:

您可以使用 Jquery 创建 Promise 或 ajax 调用来与后端交互。 另一种方式,如果你只使用restful服务而不是spring MVC模块,那么是使用angularjs,即angular 1.x,你可以使用https模块进行restful调用并使用路由模块来路由页面(这也将让你申请一个SPA)

【讨论】:

    【解决方案2】:

    您可以使用 jersey 库,例如 https://jersey.github.io/

    然后你会得到这样的东西(JSON 或 XML 到字符串)

        ...
        import com.sun.jersey.api.client.Client;
        import com.sun.jersey.api.client.ClientResponse;
        import com.sun.jersey.api.client.WebResource;
    
        // Create Client
             Client client = Client.create();
    
             WebResource webResource = client.resource("http://localhost:8080/<yourpath to resource>");
    
             ClientResponse response = webResource.accept("application/json").get(ClientResponse.class);
    
             // Status 200 is successful.
             if (response.getStatus() != 200) {
                 System.out.println("Failed with HTTP Error code: " + response.getStatus());
                 String error= response.getEntity(String.class);
                 System.out.println("Error: "+error);
                 return;
             }
    
             String output = response.getEntity(String.class);
    
             System.out.println("Output from Server .... \n");
             System.out.println(output);
             ...
    

    【讨论】:

    • 此代码在控制台上打印响应。我想在 jsp 页面上显示响应。有什么替代品吗?
    猜你喜欢
    • 1970-01-01
    • 2011-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多