2012-06-12 32 views
5

Tôi sử dụng dịch vụ nghỉ ngơi bên trong ứng dụng của mình và tôi muốn sử dụng dịch vụ đậu mùa xuân. Mùa xuân tôi đang sử dụng là phiên bản 2.5. Một phần của web.xml:Dịch vụ Jersey REST là Thành phần mùa xuân

<servlet> 
    <servlet-name>jersey-servlet</servlet-name> 
    <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class> 
    <init-param> 
     <param-name>com.sun.jersey.config.property.packages</param-name> 
     <param-value>com.app.rest</param-value> 
    </init-param> 
    <init-param> 
     <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name> 
     <param-value>true</param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
</servlet> 

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

Trong pom.xml tôi có phụ thuộc:

<dependency> 
    <groupId>com.sun.jersey</groupId> 
    <artifactId>jersey-server</artifactId> 
    <version>1.8</version> 
</dependency> 
<dependency> 
     <groupId>com.sun.jersey</groupId> 
     <artifactId>jersey-json</artifactId> 
     <version>1.8</version> 
</dependency> 

Trong context.xml tôi đã thêm:

<context:component-scan base-package="com.app.rest"/> 

và cũng:

<tx:annotation-driven proxy-target-class="true" /> 

Phần thú vị của se rvice lớp:

@Component 
@Path("/notification") 
@Scope("singleton") 
public class PushNotification { 

    @Autowired 
    //@Resource(name = "sendMessageServiceFacade") 
    private SendMessageServiceFacade sendMessageServiceFacade; 

    @Autowired 
    //@Resource(name = "responseCode") 
    private NotificationResponseMessage responseCode; 

    @Autowired 
    //@Resource(name = "validator") 
    private PushMessagePreValidator validator; 

    @POST 
    @Path("/register") 
    @Consumes(MediaType.APPLICATION_JSON) 
    public Response registerDevice(PushWooshRegisterDeviceDto dto) { 
     if (validator.validate(dto) == 200) { 
      return invokePushMessage(dto, PushMessageType.REGISTER.getMsgType()); 
     } else { 
      return buildFailResponse(); 
     } 
    } 

    @GET 
    @Path("/{param}") 
    public Response ping(@PathParam("param") String param) { 
     return Response.status(200).entity(param).build(); 
    } 

phương thức GET hoạt động như dự kiến ​​(về cơ bản nó hoạt động :)), nhưng phương thức POST ném NullPointerException trên dòng: if (validator.validate (DTO) == 200).

Tôi không biết tại sao chú thích @Autowired không hoạt động ở đây, ale tôi đã thử với @Resource - cùng một hiệu ứng.

Bất kỳ mẹo nào cũng có thể hữu ích.

Xin cảm ơn trước, Marek.

Trả lời

3

Nếu bạn muốn sử dụng Jersey với Spring, bạn cần sử dụng mô-đun tích hợp Spring - tức là phụ thuộc vào jersey-spring và sử dụng SpringServlet thay vì lớp servlet Jersey ServletContainer. Xem ở đây để biết thêm: http://jersey.java.net/nonav/apidocs/latest/contribs/jersey-spring/com/sun/jersey/spi/spring/container/servlet/package-summary.html

+0

tôi hy vọng tôi có thể làm điều đó mà không cần áo xuân, cũng ốm thêm exludes vào mùa xuân trong sự phụ thuộc này và hy vọng nó wil tôi làm việc :) – Marek

0

Nếu bạn thực hiện các giao diện org.springframework.validation.Validator, bạn sẽ thấy các Validate phương pháp dự kiến ​​hai tham số, đó là loại Object và kiểu lỗi, vì vậy bạn cần phải thêm một lớp khác để Validate của bạn gọi

BeanPropertyBindingResult v = new BeanPropertyBindingResult(dto,"Errors"); 
validator.validate(dto, v); 
Các vấn đề liên quan