webServie的RESTful类型服务端
1 web.xml
<servlet> <servlet-name>CXFServlet</servlet-name> <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>CXFServlet</servlet-name> <url-pattern>/ws/*</url-pattern> </servlet-mapping>
2 applicationContext.xml
<import resource="restfulContext.xml" />
3 restfulContext.xml
<jaxrs:server id="restfulServer" address="/rest"> <jaxrs:serviceBeans> <ref bean="webDutyWSImpl" /> </jaxrs:serviceBeans> <jaxrs:providers> <bean class="com.huawei.support.security.JAXRSAuthHandler"></bean> <bean class="com.huawei.support.provider.ApplicationExceptionMapper"></bean> <bean class="com.huawei.support.provider.MapMessageBodyReader"></bean> <bean class="com.huawei.support.provider.MapMessageBodyWriter"></bean> <bean class="com.huawei.support.provider.StringListMessageBodyReader"></bean> <bean class="com.huawei.support.provider.StringListMessageBodyWriter"></bean> <bean class="com.huawei.support.provider.DataHandlerMessageBodyReader"></bean> <bean class="com.huawei.support.provider.DataHandlerMessageBodyWriter"></bean> </jaxrs:providers> <jaxrs:extensionMappings> <entry key="json" value="application/json" /> <entry key="xml" value="application/xml" /> </jaxrs:extensionMappings> </jaxrs:server>
4 另起一个API项目包SupportWS-RS-API,在其中定义WS接口
@Path("/webduty") @Produces(MediaType.APPLICATION_JSON) public interface IWebDutyWS{ @POST @Path("/webdutyrole") @Consumes(MediaType.APPLICATION_JSON) List<DictItemBean> getDictItemList(@QueryParam("") DictItemBean param) throws RecoveryException; }
5在WS项目下建立WS实现类
@Component("webDutyWSImpl") //本来是@Service,我换成了@Component一样可以 public class WebDutyWSImpl implements IWebDutyWS { @Autowired @Qualifier("webDutyServiceImpl") private IWebDutyService webDutyServiceImpl; //注入服务实现类 @Override public List<DictItemBean> getDictItemList(DictItemBean param)throws RecoveryException { List<DictItemBean> roleList = webDutyServiceImpl.getDictItemList(param); //调用服务实现类的方法 return roleList; } }
6在WS项目下建立Service接口
public interface IWebDutyService { List<DictItemBean> getDictItemList(DictItemBean dictItem); }
7在WS项目下建立Service实现类
@Component("webDutyServiceImpl") //本来是@Service,我换成了@Component一样可以 public class WebDutyServiceImpl implements IWebDutyService { @Autowired @Qualifier("webDutyDao") private WebDutyDao webDutyDao; @Override public List<DictItemBean> getDictItemList(DictItemBean param) { List<DictItemBean> restult = new ArrayList<DictItemBean>(); if (param != null && !StringUtil.isNullOrEmpty(param.getClassifyId())) { String[] classfyIds = param.getClassifyId().trim().split(","); for (String id : classfyIds) { param.setClassifyId(id); restult.addAll(webDutyDao.getDictItemList(param)); } } return restult; } }
---------------------------------RESTful服务端完成--------------------------
后记1
@Produces 注释代表的是一个资源可以返回的 MIME 类型。写出到response的内容类型。
@Consumes 注释代表的是一个资源可以接受的 MIME 类型。客户端request传过来的内容类型。
后记2
公司的项目使用的是Spring3.0。从Spring 2.5 开始,除了提供 @Component 注释外,还定义了几个拥有特殊语义的注释,它们分别是:@Repository、@Service 和 @Controller。在目前的Spring 版本中,这 3 个注释和 @Component 是等效的,Spring 将在以后的版本中为它们添加特殊的功能。所以,如果 Web 应用程序采用了经典的三层分层结构的话,最好在持久层、业务层和控制层分别采用 @Repository、@Service 和 @Controller 对分层中的类进行注释,而用 @Component 对那些比较中立的类进行注释。
在applicationContext.xml打开自动扫描,并定义扫描路径
<context:component-scan base-package=”com.eric.spring”>
这种方式的bean默认是单例的,如果想改变,可以使用@Service(“beanName”) @Scope(“prototype”)来改变。可以使用以下方式指定初始化方法和销毁方法(方法名任意):
@PostConstruct public void init() { }
@PreDestroy public void destory() { }