微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

RESTClient调试RESTful Webservice


本文讨论用火狐浏览器调试RESTful Webservice

1、下载RESTClient插件

点击添加组件,搜索RESTClient,点击下载。


2、发布一个RESTful Webservice应用程序

CXF和Spring完美集合,


1)web.xml配置,配置拦截webservice请求映射

<servlet>
	<servlet-name>CXFServlet</servlet-name>
	<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
</servlet>

<servlet-mapping>
	<servlet-name>CXFServlet</servlet-name>
	<url-pattern>/rest/*</url-pattern>
</servlet-mapping>


2)spring.xml配置,发布webservice

<!--RESTful schema文件-->
xmlns:jaxrs="http://cxf.apache.org/jaxrs"
http://cxf.apache.org/jaxrs	http://cxf.apache.org/schemas/jaxrs.xsd

<!-- 服务bean -->
<bean id="mailService" class="com.deppon.uums.mail.server.service.impl.MailService" />

<!-- 使用restful方式服务 -->
<jaxrs:server id="uumsMailService" address="/ws">
	<jaxrs:serviceBeans>
		<ref bean="mailService" />
	</jaxrs:serviceBeans>
	<jaxrs:extensionMappings>
		<entry key="json" value="application/json" />
		<entry key="xml" value="application/xml" />
	</jaxrs:extensionMappings>
	
	<jaxrs:providers>
		<!-- json解析器 -->
		<bean class="org.apache.cxf.jaxrs.provider.JSONProvider" />
	</jaxrs:providers>
</jaxrs:server>

3)webservice接口,用于被外界调用的接口

/**
 * 
 * <p>邮件服务接口</p>
 * @author Stephen
 * @date Mar 30,2015
 */
@Path("/mail")
public interface IMailService extends IService {
	
	/**
	 * 
	 * <p>发送邮件</p>
	 * @author Stephen
	 * @since 1.0
	 * @param mailInfo 邮件信息参数,
<span style="white-space:pre">	</span> * json格式:{"sender":"[email protected]","recievers":["[email protected]","[email protected]"]}
	 * @return 返回处理后的结果,成功和失败的列表
	 * <li>sucess 邮件成功
	 * <li>Failed 邮件失败
	 */
	@Consumes({MediaType.APPLICATION_JSON,MediaType.APPLICATION_XML}) 
	@Produces({MediaType.APPLICATION_JSON,MediaType.APPLICATION_XML})
	@POST  //方法为POST 
	@Path("/sendmail")
	public String sendMail(String mailInfo);
}

5)webservice接口实现类,用于具体业务逻辑实现

package com.deppon.uums.mail.server.service.impl;

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

import javax.annotation.Resource;

import net.sf.json.JSONObject;

import org.apache.commons.lang.StringUtils;
import org.springframework.transaction.annotation.Transactional;

import com.deppon.uums.mail.server.dao.impl.MailDao;
import com.deppon.uums.mail.server.service.IMailService;
import com.deppon.uums.mail.shared.domain.DeptEntity;
import com.deppon.uums.mail.shared.domain.MailRequestEntity;
import com.deppon.uums.mail.shared.domain.SenderEntity;


/**
 * <p>邮件服务实现类</p>
 * 记录日志信息,以后再做,若果有要求的话,例如提供页面查看发送邮件的信息,每天发邮件数量,峰值、失败原因、服务器压力等。
 * @author Stephen
 * @date Mar 31,2015
 * @since 1.0
 */

@Transactional
public class MailService implements IMailService {

	@Resource
	private MailDao mailDao;
	
	private static final String OFFICE_NAME = "办公室";
	private static final String NOT_PERMITTED = "不能跨系统发邮件,例如人力资源本部人员不能群发给企业发展办公室任一部门!";
	private static final String NOT_MATCHED = "邮箱不符合规则,邮箱应该是[email protected]等!";
	private static final String NOT_FOUND = "在UUMS系统里查不到其邮件,可能历史原因,请联系IT热线手动给其加上邮件信息!";
	
	
	@Override
	public String sendMail(String mailInfo) {
		
		/**
		 * 处理后的邮件信息
		 */
		String mailMessage = "";
		
		String sender = "";  //发件人
		List<String> recievers = new ArrayList<String>();  //收件人列表
		
		List<String> empMail = new ArrayList<String>();  //个人邮件
		List<String> deptMail = new ArrayList<String>();  //部门邮件
		
		Map<String,List<String>> message = new HashMap<String,List<String>>();
		List<String> success = new ArrayList<String>();
		List<String> Failed = new ArrayList<String>();
		
		if (StringUtils.isNotBlank(mailInfo)) {
			//将json数据解析成对象
			JSONObject object = JSONObject.fromObject(mailInfo);
			MailRequestEntity mailEntity = (MailRequestEntity) JSONObject.toBean(object,MailRequestEntity.class);
			sender = mailEntity.getSender();
			recievers = mailEntity.getRecievers();
			
			//对收件人列表进行过滤,把个人过滤掉
			for(String mail : recievers){
				if (!mail.contains("@deppon.com")) {  //不是德邦内部邮箱不允许发邮件
					Failed.add(mail + ":" + NOT_MATCHED);
				} else {
					if (mail.startsWith("W")) {
						deptMail.add(mail);
					} else {
						empMail.add(mail);
					}
				}
			}
			
			//从数据库查找发件人信息
			SenderEntity senderDept = mailDao.queryBySender(sender);
			//从数据库查找部门收件人列表
			List<DeptEntity> deptList = mailDao.queryByRecivers(deptMail);
			
			//发件人邮件在UUMS系统里可能查不到,历史原因
			if(senderDept == null){
				Failed.add(sender + ":" + NOT_FOUND);
				message.put("Failed",Failed);
			} 
			
			if (senderDept != null && deptList != null) {
				String empDeptName = senderDept.getDeptName();
				String empDeptId = senderDept.getDeptId();
				//发送人的部门是办公室,则发送人的权限和办公室部门的上级部门拥有相同的权限
				if (empDeptName.contains(OFFICE_NAME)) {
					empDeptId = senderDept.getParentId();
				} 
				
				for(DeptEntity dept : deptList) {
					String deptSeq = dept.getDeptSeq();
					deptSeq = deptSeq.substring(1,deptSeq.length()-1);
					List<String> recDepts = Arrays.asList(deptSeq.split("\\.")); //部门收件人部门id列表
					if (recDepts.contains(empDeptId)) {  //如果收件人的序列包含发件人,则可以发送
						success.add(dept.getDeptEmail() + ":" + dept.getDeptName());
					} else {
						Failed.add(dept.getDeptEmail() + ":" + dept.getDeptName() + ":" + NOT_PERMITTED);
					}
				}
				success.addAll(empMail);  //把个人邮箱列表添加到成功集合里
				message.put("success",success);
				message.put("Failed",Failed);
			} 
			
			//将处理结果返回给调用者
			mailMessage = JSONObject.fromObject(message).toString();
		} 
		
		return mailMessage;
	}
	
	
}

6)webservice测试,使用代码测试,启动tomcat服务器

@Test
public void testMail() throws Exception {
	
	String mailInfo = "{'sender':'[email protected]'," +
			"'recievers':['[email protected]','[email protected]'," +
			"'[email protected]','[email protected]']}";
	
	WebClient client = WebClient.create("http://localhost:8088/uums-mail/rest/ws/");
	String result = client.path("mail/sendmail").
			accept(MediaType.APPLICATION_JSON).post(mailInfo,String.class);
	if (StringUtils.isNotBlank(result)) {
		System.out.println(result);
	}
}


得到结果:

{"Failed":["[email protected]:宁波鄞州区姜山营业部:不能跨系统发邮件,例如人力资源本部人员不能群发给企业发展办公室任一部门!"],

"success":["[email protected]:郑州转运中心","[email protected]:郑州大区","[email protected]:安徽北部大区"]}


7)使用RESTClient插件测试,得到的结果如下:

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐