5

アプリ内にRESTサービスがあり、SpringBeanを使用したいと思います。私が使用しているSpringはバージョン2.5です。web.xmlの一部:

<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>

pom.xmlには依存関係があります:

<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>

context.xmlに次を追加しました:

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

そしてまた:

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

サービスクラスの興味深い部分:

@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();
    }

GETメソッドは期待どおりに機能します(基本的には機能します:))が、POSTメソッドは行にNullPointerExceptionをスローします:if(validator.validate(dto)== 200)。

@Autowiredアノテーションがここで機能しない理由はわかりません。@Resourceで試してみました-同じ効果です。

どんなヒントでも役立つかもしれません。

よろしくお願いします、マレク。

4

2 に答える 2

3

Jersey を Spring で使用する場合は、Spring 統合モジュールを利用する必要があります。つまり、jersey-spring に依存し、Jersey ServletContainer サーブレット クラスの代わりに SpringServlet を使用します。詳細については、こちらを参照してください: http://jersey.java.net/nonav/apidocs/latest/contribs/jersey-spring/com/sun/jersey/spi/spring/container/servlet/package-summary.html

于 2012-06-12T15:22:50.380 に答える
0

org.springframework.validation.Validatorインターフェースを実装した場合、検証メソッドがObject型とErrors型の 2 つのパラメーターを予期していることがわかります。そのため、検証呼び出しに別のクラスを追加する必要があります。

BeanPropertyBindingResult v = new BeanPropertyBindingResult(dto,"Errors");
validator.validate(dto, v);
于 2012-11-22T14:06:29.003 に答える