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() { }

浙公网安备 33010602011771号