Restful和CXF结合简单案例

一个适用于简单操作的接口规范而已,无规矩不成方圆,复杂操作并不适用,还是看业务发展需求的

它适合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字符串:

 

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值