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


 

posted @ 2012-12-06 15:21  寂静沙滩  阅读(1816)  评论(0编辑  收藏  举报