1. 程式人生 > >CXF系列之JAX-RS:CXF釋出與呼叫REST服務

CXF系列之JAX-RS:CXF釋出與呼叫REST服務

package com.test.rest.client;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.Entity;
import javax.ws.rs.core.GenericType;
import javax.ws.rs.core.MediaType;

import org.codehaus.jackson.jaxrs.JacksonJsonProvider;
import org.junit.Test;

import com.test.rest.bean.Product;

/**
 * 返回帶有泛型的資料
 * @author Administrator
 *
 */
public class Client1 {

	String baseAddress = "http://localhost:8080/ws/rest";
	JacksonJsonProvider jsonProvider = new JacksonJsonProvider();
	@Test
	public void retrieveAll() {
		List<Product> productList = ClientBuilder.newClient().register(jsonProvider)
				.target(baseAddress).path("/products")
				.request(MediaType.APPLICATION_JSON).get(new GenericType<List<Product>>(){});
		for (Product product : productList) {
			System.out.println(product);
		}
	}
	
	/**
	 * 該方法測試引數查詢,
	 * 如果測試表單引數,則需要提交表單
	 */
	@Test
	public void retrieveByName_param(){
		List<Product> productList = ClientBuilder.newClient()
		.register(jsonProvider)
		.target(baseAddress)
		.path("/products/name")
		.queryParam("name", "iphone63")
		.request(MediaType.APPLICATION_JSON)
		.get(new GenericType<List<Product>>(){});
		
		for (Product product : productList) {
			System.out.println(product);
		}
	}
	
	/**
	 * 新增資料
	 */
	@Test
	public void create(){
		Product product = new Product();
		product.setName("iphone7");
		product.setPrice(6000);
		
		Product resultProduct = ClientBuilder.newClient()
		.register(jsonProvider)
		.target(baseAddress)
		.path("/product")
		.request(MediaType.APPLICATION_JSON)
		.post(Entity.entity(product, MediaType.APPLICATION_JSON), new GenericType<Product>(){});
		
		System.out.println(resultProduct);
		
		retrieveAll();
	}
	
	/**
	 * 修改資料1
	 */
	@Test
	public void update(){
		Product product = new Product();
		product.setId(1L);
		product.setName("iphone6s");
		product.setPrice(4000);
		
		Product resultTarget = ClientBuilder.newClient()
		.register(jsonProvider)
		.target(baseAddress)
		.path("/product")
		.request(MediaType.APPLICATION_JSON)
		.put(Entity.entity(product, MediaType.APPLICATION_JSON), new GenericType<Product>(){});
		
		System.out.println(resultTarget);
		
		System.out.println("==================");
		retrieveAll();
	}
	
	/**
	 * 修改資料2
	 */
	@Test
	public void update2(){
		Map<String,Object> fieldParam = new HashMap<>();
		fieldParam.put("name", "ipad mini");
		fieldParam.put("price", 1999);
		
		Product product = ClientBuilder.newClient()
		.register(jsonProvider)
		.target(baseAddress)
		.path("/product/2")
		.request(MediaType.APPLICATION_JSON)
		.put(Entity.entity(fieldParam, MediaType.APPLICATION_JSON), new GenericType<Product>(){});
		System.out.println(product);
		
		System.out.println("===========================");
		
		retrieveAll();
	}
	
	/**
	 * 路徑引數
	 * 刪除資料:根據id刪除
	 */
	@Test
	public void delete(){
		Product product = ClientBuilder.newClient()
		.register(jsonProvider)
		.target(baseAddress)
		.path("/product/1")
		.request(MediaType.APPLICATION_JSON)
		.delete(new GenericType<Product>(){});
		
		System.out.println(product);
		
		System.out.println("===============");
		
		retrieveAll();
	}
	
	/**
	 * 查詢引數
	 * 刪除資料:根據id刪除
	 */
	@Test
	public void delete_param(){
		Product product = ClientBuilder.newClient()
		.register(jsonProvider)
		.target(baseAddress)
		.path("/product")
		.queryParam("id", 2L)
		.request(MediaType.APPLICATION_JSON)
		.delete(new GenericType<Product>(){});
		
		System.out.println(product);
		
		System.out.println("=================");
		
		retrieveAll();
	}
}

第三種:通用的WebClient客戶端