一个适用于简单操作的接口规范而已,无规矩不成方圆,复杂操作并不适用,还是看业务发展需求的
它适合CRUD并且只适合CRUD,有的浏览器可能不支持POST、GET之外的提交方式,要特殊处理,API容易给让误解中能进行增、删、查、改等操作。
RESTful风格只是一种架构风格,一种思想,我们不能一概的说它的好或不好。存在即合理,在软件开发过程中,无论是采用RPC风格还是RESTful,只要是适合自己业务就是最好的
CXF 支持多种“Frontend”编程模型,CXF 实现了JAX-WSAPI (遵循 JAX-WS 2.0 TCK 版本),它也包含一个“simple frontend”允许客户端和 EndPoint 的创建,而不需要 Annotation 注解。CXF 既支持WSDL优先开发,也支持从 Java 的代码优先开发模式。容易使用: CXF 设计得更加直观与容易使用。有大量简单的 API 用来快速地构建代码优先的 Services,各种 Maven 的插件也使集成更加容易,支持 JAX-WS API ,支持 Spring 2.0 更加简化的 XML 配置方式,等等。支持二进制和遗留协议:CXF 的设计是一种可插拨的架构,既可以支持 XML ,也可以支持非 XML 的类型绑定,比如:JSON 和 CORBA
首先创建一个maven的web工程,本项目中展示了两种格式的数据User是xml的,Product是json的,下面进行代码展示:
整体:
pom.xml:
<dependencies>
<!-- Spring -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>4.3.17.RELEASE</version>
</dependency>
<!-- CXF -->
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-frontend-jaxrs</artifactId>
<version>3.1.9</version>
</dependency>
<!-- Jackson -->
<dependency>
<groupId>com.fasterxml.jackson.jaxrs</groupId>
<artifactId>jackson-jaxrs-json-provider</artifactId>
<version>2.8.9</version>
</dependency>
<!-- 日志信息的报表 -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.25</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.bundles</groupId>
<artifactId>jaxrs-ri</artifactId>
<version>2.20</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
</dependency>
</dependencies>
web.xml:
<web-app>
<display-name>Archetype Created Web Application</display-name>
<!-- Spring -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:spring.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- CXF -->
<servlet>
<servlet-name>cxf</servlet-name>
<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>cxf</servlet-name>
<url-pattern>/ws/*</url-pattern>
</servlet-mapping>
</web-app>
spring.xml:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="productServiceImpl" class="com.lyh.service.impl.ProductServiceImpl" />
<bean id="userService" class="com.lyh.service.impl.UserService" />
<bean id="encodingLoggingInInterceptor" class="com.lyh.util.EncodingLoggingInInterceptor"/>
<bean id="outLoggingInterceptor" class="org.apache.cxf.interceptor.LoggingOutInterceptor"/>
<import resource="spring-cxf.xml"/>
</beans>
spring -cxf.xml:里面的标签不懂大家可以百度
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:jaxrs="http://cxf.apache.org/jaxrs"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://cxf.apache.org/jaxrs
http://cxf.apache.org/schemas/jaxrs.xsd">
<jaxrs:server address="/rest">
<jaxrs:serviceBeans>
<ref bean="productServiceImpl"/>
<ref bean="userService"/>
</jaxrs:serviceBeans>
<jaxrs:providers>
<bean class="com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider"/>
</jaxrs:providers>
<jaxrs:inInterceptors>
<ref bean="encodingLoggingInInterceptor"/>
</jaxrs:inInterceptors>
<jaxrs:outInterceptors>
<ref bean="outLoggingInterceptor"/>
</jaxrs:outInterceptors>
</jaxrs:server>
</beans>
实体类:User
package com.lyh.domain;
/**
* @author 633805 LYH
* @version V1.0
* @description 对类的描述
* @create 2018-11-15 10:44
* @since 1.7
*/
import javax.xml.bind.annotation.XmlRootElement;
import java.io.Serializable;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name = "user")
public class User implements Serializable {
private static final long serialVersionUID = 1L;
private int id;
private String name;
private String profession;
public User(){}
public User(int id, String name, String profession){
this.id = id;
this.name = name;
this.profession = profession;
}
public int getId() {
return id;
}
@XmlElement
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
@XmlElement
public void setName(String name) {
this.name = name;
}
public String getProfession() {
return profession;
}
@XmlElement
public void setProfession(String profession) {
this.profession = profession;
}
@Override
public boolean equals(Object object){
if(object == null){
return false;
}else if(!(object instanceof User)){
return false;
}else {
User user = (User)object;
if(id == user.getId()
&& name.equals(user.getName())
&& profession.equals(user.getProfession())
){
return true;
}
}
return false;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", profession='" + profession + '\'' +
'}';
}
}
Product类:
package com.lyh.domain;
import javax.sql.rowset.serial.SerialArray;
import javax.xml.bind.annotation.XmlRootElement;
import java.io.Serializable;
/**
* @author 633805 LYH
* @version V1.0
* @description 对类的描述
* @create 2018-11-14 15:49
* @since 1.7
*/
public class Product implements Serializable {
private static final long serialVersionUID = 4042024431606993335L;
private long Id;
private String Name;
private int price;
public Product(long id, String name, int price) {
Id = id;
Name = name;
this.price = price;
}
public Product() {
}
public long getId() {
return Id;
}
public void setId(long id) {
Id = id;
}
public String getName() {
return Name;
}
public void setName(String name) {
Name = name;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
@Override
public String toString() {
return "Product{" +
"Id=" + Id +
", Name='" + Name + '\'' +
", price=" + price +
'}';
}
}
业务类UserDao
package com.lyh.service;
/**
* @author 633805 LYH
* @version V1.0
* @description 对类的描述
* @create 2018-11-15 10:45
* @since 1.7
*/
import com.lyh.domain.User;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.List;
public class UserDao {
public List<User> getAllUsers() {
List <User> user = new ArrayList<>();
for (int i = 0 ; i < 3; i ++) {
User user1 = new User();
user1.setId(i);
user1.setName("lyh" + i);
user1.setProfession("暂无" + i);
user.add(user1);
}
return user;
}
public User getUser(int id){
List<User> users = getAllUsers();
for(User user: users){
if(user.getId() == id){
return user;
}
}
return null;
}
public int addUser(User pUser){
List<User> userList = getAllUsers();
boolean userExists = false;
for(User user: userList){
if(user.getId() == pUser.getId()){
userExists = true;
break;
}
}
if(!userExists){
userList.add(pUser);
saveUserList(userList);
return 1;
}
return 0;
}
public int updateUser(User pUser){
List<User> userList = getAllUsers();
for(User user: userList){
if(user.getId() == pUser.getId()){
int index = userList.indexOf(user);
userList.set(index, pUser);
saveUserList(userList);
return 1;
}
}
return 0;
}
public int deleteUser(int id){
List<User> userList = getAllUsers();
for(User user: userList){
if(user.getId() == id){
int index = userList.indexOf(user);
userList.remove(index);
saveUserList(userList);
return 1;
}
}
return 0;
}
private void saveUserList(List<User> userList){
try {
File file = new File("Users.dat");
FileOutputStream fos;
fos = new FileOutputStream(file);
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(userList);
oos.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
处理类restful:
package com.lyh.service.impl;
/**
* @author 633805 LYH
* @version V1.0
* @description 对类的描述
* @create 2018-11-15 10:48
* @since 1.7
*/
import com.lyh.domain.User;
import com.lyh.service.UserDao;
import javax.ws.rs.DELETE;
import java.io.IOException;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
import javax.ws.rs.FormParam;
import javax.ws.rs.GET;
import javax.ws.rs.OPTIONS;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
@Path("/UserService")
public class UserService {
UserDao userDao = new UserDao();
private static final String SUCCESS_RESULT="<result>success</result>";
private static final String FAILURE_RESULT="<result>failure</result>";
@GET
@Path("/users")
@Produces(MediaType.APPLICATION_XML)
public List<User> getUsers(){
return userDao.getAllUsers();
}
@GET
@Path("/users/{userid}")
@Produces(MediaType.APPLICATION_XML)
public User getUser(@PathParam("userid") int userid){
return userDao.getUser(userid);
}
@PUT
@Path("/users")
@Produces(MediaType.APPLICATION_XML)
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
public String createUser(@FormParam("id") int id,
@FormParam("name") String name,
@FormParam("profession") String profession,
@Context HttpServletResponse servletResponse) throws IOException{
User user = new User(id, name, profession);
int result = userDao.addUser(user);
if(result == 1){
return SUCCESS_RESULT;
}
return FAILURE_RESULT;
}
@POST
@Path("/users")
@Produces(MediaType.APPLICATION_XML)
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
public String updateUser(@FormParam("id") int id,
@FormParam("name") String name,
@FormParam("profession") String profession,
@Context HttpServletResponse servletResponse) throws IOException{
User user = new User(id, name, profession);
int result = userDao.updateUser(user);
if(result == 1){
return SUCCESS_RESULT;
}
return FAILURE_RESULT;
}
@DELETE
@Path("/users/{userid}")
@Produces(MediaType.APPLICATION_XML)
public String deleteUser(@PathParam("userid") int userid){
int result = userDao.deleteUser(userid);
if(result == 1){
return SUCCESS_RESULT;
}
return FAILURE_RESULT;
}
@OPTIONS
@Path("/users")
@Produces(MediaType.APPLICATION_XML)
public String getSupportedOperations(){
return "<operations>GET, PUT, POST, DELETE</operations>";
}
}
Product接口类:(项目开发中一般采用接口这种方式)
package com.lyh.service;
/**
* @author 633805 LYH
* @version V1.0
* @description 对类的描述
* @create 2018-11-14 15:47
* @since 1.7
*/
import com.lyh.domain.Product;
import javax.ws.rs.POST;
import java.util.List;
import java.util.Map;
import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
import javax.ws.rs.FormParam;
import javax.ws.rs.GET;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType;
public interface ProductService {
@GET
@Path("/products")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
List<Product> retrieveAllProducts();
@GET
@Path("/product/{id}")
@Produces(MediaType.APPLICATION_JSON)
Product retrieveProductById(@PathParam("id")long id);
/**
* 参数查询
* @param name
* @return
*/
@GET
@Path("/products/name")
@Produces(MediaType.APPLICATION_JSON)
List<Product> retrieveProductsByName_param(@QueryParam("name")String name);
/**
* 提交表单查询
* @param name
* @return
*/
@POST
@Path("/products/form/name")
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
@Produces(MediaType.APPLICATION_JSON)
List<Product> retrieveProductsByName_form(@FormParam("name")String name);
@POST
@Path("/product")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
Product createProduct(Product product);
@POST
@Path("/product/create")
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
@Produces(MediaType.APPLICATION_JSON)
Product createProduct(@FormParam("name")String name,@FormParam("price")int price);
@PUT
@Path("/product/{id}")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
Product updateProductById(@PathParam("id")long id,Map<String,Object> fieldMap);
@PUT
@Path("/product")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
Product updateProduct(Product product);
@PUT
@Path("/product/update")
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
@Produces(MediaType.APPLICATION_JSON)
Product updateProduct(@FormParam("id")long id,@FormParam("name")String name,@FormParam("price")int price);
@DELETE
@Path("/product/{id}")
@Produces(MediaType.APPLICATION_JSON)
Product deleteProductById(@PathParam("id")long id);
@DELETE
@Path("/product")
@Produces(MediaType.APPLICATION_JSON)
Product deleteProductById_param(@QueryParam("id")long id);
}
接口实现类:
package com.lyh.service.impl;
/**
* @author 633805 LYH
* @version V1.0
* @description 对类的描述
* @create 2018-11-14 15:48
* @since 1.7
*/
import com.lyh.domain.Product;
import com.lyh.service.ProductService;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
public class ProductServiceImpl implements ProductService {
private static final List<Product> productList = new ArrayList<Product>();
static {
productList.add(new Product(1, "iphone63", 5000));
productList.add(new Product(2, "ipad mini", 2500));
}
@Override
public List<Product> retrieveAllProducts() {
Collections.sort(productList, new Comparator<Product>() {
@Override
public int compare(Product p1, Product p2) {
return (p1.getId() > p2.getId()) ? -1 : 1;
}
});
return productList;
}
@Override
public Product retrieveProductById(long id) {
Product targetProduct = null;
for (Product product : productList) {
if (product.getId() == id) {
targetProduct = product;
break;
}
}
return targetProduct;
}
@Override
public List<Product> retrieveProductsByName_param(String name){
List<Product> targetList = new ArrayList<Product>();
for (Product product : productList) {
if (product.getName().equals(name)) {
targetList.add(product);
}
}
return targetList;
}
@Override
public List<Product> retrieveProductsByName_form(String name) {
List<Product> targetList = new ArrayList<Product>();
for (Product product : productList) {
if (product.getName().equals(name)) {
targetList.add(product);
}
}
return targetList;
}
@Override
public Product createProduct(Product product) {
product.setId(System.currentTimeMillis());
productList.add(product);
return product;
}
@Override
public Product createProduct(String name,int price){
Product product = new Product();
product.setId(System.currentTimeMillis());
product.setName(name);
product.setPrice(price);
productList.add(product);
return product;
}
@Override
public Product updateProductById(long id, Map<String, Object> fieldMap) {
Product product = retrieveProductById(id);
if (product != null) {
try {
for (Map.Entry<String, Object> fieldEntry : fieldMap.entrySet()) {
Field field = Product.class.getDeclaredField(fieldEntry
.getKey());
field.setAccessible(true);
field.set(product, fieldEntry.getValue());
}
} catch (Exception e) {
e.printStackTrace();
}
}
return product;
}
@Override
public Product updateProduct(Product product){
if(product != null){
Product targetProduct = retrieveProductById(product.getId());
if(targetProduct != null){
targetProduct.setName(product.getName());
targetProduct.setPrice(product.getPrice());
}
return targetProduct;
}
return null;
}
@Override
public Product updateProduct(long id, String name, int price){
Product product = retrieveProductById(id);
if(product != null){
product.setName(name);
product.setPrice(price);
}
return product;
}
@Override
public Product deleteProductById(long id) {
Product targetProduct = null;
Iterator<Product> it = productList.iterator();
while (it.hasNext()) {
Product product = it.next();
if (product.getId() == id) {
targetProduct = product;
it.remove();
break;
}
}
return targetProduct;
}
@Override
public Product deleteProductById_param(long id){
Product targetProduct = null;
Iterator<Product> it = productList.iterator();
while (it.hasNext()) {
Product product = it.next();
if (product.getId() == id) {
targetProduct = product;
it.remove();
break;
}
}
return targetProduct;
}
}
编码工具类:(可以不需要):
package com.lyh.util;
/**
* @author 633805 LYH
* @version V1.0
* @description 对类的描述
* @create 2018-11-14 15:59
* @since 1.7
*/
/**
* Copyright (c) 2011-2014 All Rights Reserved.
*/
import org.apache.cxf.interceptor.LoggingInInterceptor;
import org.apache.cxf.interceptor.Fault;
import org.apache.cxf.message.Message;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class EncodingLoggingInInterceptor extends LoggingInInterceptor {
private Logger log = LoggerFactory.getLogger(getClass());
/**
*
*/
public EncodingLoggingInInterceptor() {
// TODO Auto-generated constructor stub
super();
}
/**
* @see org.apache.cxf.interceptor.LoggingInInterceptor#handleMessage(org.apache.cxf.message.Message)
*/
@Override
public void handleMessage(Message message) throws Fault {
// TODO Auto-generated method stub
String encoding = System.getProperty("file.encoding");
encoding = encoding == null || encoding.equals("") ? "UTF-8" : encoding;
log.debug("encoding : " + encoding);
message.put(Message.ENCODING, encoding);
super.handleMessage(message);
}
}
接下来就是把项目打成war包或者其他放到服务器上去,然后再进行自己编写服务端进行调用,下面是用postman直接调用的结果:
自己也可以在后台编写客户端进行调用:
第一种测试xml格式的:
/**
* @author 633805 LYH
* @version V1.0
* @description 对类的描述
* @create 2018-11-15 10:50
* @since 1.7
*/
import com.lyh.domain.User;
import java.util.List;
import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.Entity;
import javax.ws.rs.core.Form;
import javax.ws.rs.core.GenericType;
import javax.ws.rs.core.MediaType;
public class WebServiceTester {
private Client client;
private String REST_SERVICE_URL = "http://localhost:8080/ws/rest/UserService/users";
private static final String SUCCESS_RESULT="<result>success</result>";
private static final String PASS = "pass";
private static final String FAIL = "fail";
private void init(){
this.client = ClientBuilder.newClient();
}
public static void main(String[] args){
WebServiceTester tester = new WebServiceTester();
//initialize the tester
tester.init();
//test get all users Web Service Method
tester.testGetAllUsers();
//test get user Web Service Method
//tester.testGetUser();
//test update user Web Service Method
// tester.testUpdateUser();
//test add user Web Service Method
//tester.testAddUser();
//test delete user Web Service Method
// tester.testDeleteUser();
}
//Test: Get list of all users
//Test: Check if list is not empty
private void testGetAllUsers(){
GenericType<List<User>> list = new GenericType<List<User>>() {};
List<User> users = client
.target(REST_SERVICE_URL)
.request(MediaType.APPLICATION_XML)
.get(list);
String result = PASS;
if(users.isEmpty()){
result = FAIL;
}
System.out.println(users);
System.out.println("大小:"+users.size());
for (User user : users) {
System.out.println(user);
}
System.out.println("Test case name: testGetAllUsers, Result: " + result );
}
//Test: Get User of id 1
//Test: Check if user is same as sample user
private void testGetUser(){
User sampleUser = new User();
sampleUser.setId(1);
User user = client
.target(REST_SERVICE_URL)
.path("/{userid}")
.resolveTemplate("userid", 1)
.request(MediaType.APPLICATION_XML)
.get(User.class);
String result = FAIL;
if(sampleUser != null && sampleUser.getId() == user.getId()){
result = PASS;
}
System.out.println(user.toString());
System.out.println("Test case name: testGetUser, Result: " + result );
}
//Test: Update User of id 1
//Test: Check if result is success XML.
private void testUpdateUser(){
Form form = new Form();
form.param("id", "1");
form.param("name", "suresh");
form.param("profession", "clerk");
String callResult = client
.target(REST_SERVICE_URL)
.request(MediaType.APPLICATION_XML)
.post(Entity.entity(form,
MediaType.APPLICATION_FORM_URLENCODED_TYPE),
String.class);
String result = PASS;
if(!SUCCESS_RESULT.equals(callResult)){
result = FAIL;
}
System.out.println("Test case name: testUpdateUser, Result: " + result );
}
//Test: Add User of id 2
//Test: Check if result is success XML.
private void testAddUser(){
Form form = new Form();
form.param("id", "2");
form.param("name", "naresh");
form.param("profession", "clerk");
String callResult = client
.target(REST_SERVICE_URL)
.request(MediaType.APPLICATION_XML)
.put(Entity.entity(form,
MediaType.APPLICATION_FORM_URLENCODED_TYPE),
String.class);
String result = PASS;
if(!SUCCESS_RESULT.equals(callResult)){
result = FAIL;
}
System.out.println("Test case name: testAddUser, Result: " + result );
}
//Test: Delete User of id 2
//Test: Check if result is success XML.
private void testDeleteUser(){
String callResult = client
.target(REST_SERVICE_URL)
.path("/{userid}")
.resolveTemplate("userid", 2)
.request(MediaType.APPLICATION_XML)
.delete(String.class);
String result = PASS;
if(!SUCCESS_RESULT.equals(callResult)){
result = FAIL;
}
System.out.println("Test case name: testDeleteUser, Result: " + result );
}
}
结果拿到数据映射成实体类:
测试json格式的:
/**
* @author 633805 LYH
* @version V1.0
* @description 对类的描述
* @create 2018-11-14 15:13
* @since 1.7
*/
import com.lyh.domain.Product;
import com.sun.deploy.net.HttpResponse;
import java.awt.*;
import java.awt.print.Book;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import java.util.concurrent.Future;
import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.Entity;
import javax.ws.rs.core.Form;
import javax.ws.rs.core.GenericType;
import javax.ws.rs.core.MediaType;
public class Tester {
private Client client;
private String REST_SERVICE_URL = "http://localhost:8080/ws/rest/products";
private static final String SUCCESS_RESULT="<result>success</result>";
private static final String PASS = "pass";
private static final String FAIL = "fail";
private void init(){
this.client = ClientBuilder.newClient();
}
public static void main(String[] args){
Tester tester = new Tester();
//initialize the tester
tester.init();
//test get all users Web Service Method
tester.testGetAllProducts();
}
//Test: Get list of all users
//Test: Check if list is not empty
private void testGetAllProducts() {
//get方式
String result = client.target(REST_SERVICE_URL).request(MediaType.APPLICATION_JSON).get(String.class);
System.out.println(result);
}
}
结果拿到json字符串: