1

私はGoogleを調べましたが、ここの他の質問は役に立ちませんでした. 彼らはすべて同じことを言っています... jersey-jsonの.jarをインポートし(完了)、依存関係をpom.xmlに追加し(完了)、POJOMappingFeatureをweb.xmlに追加します(完了)、まだできませんサーバーに出入りする JSON を使用して、Restful Web サービスにアクセスします。

web.xml

<web-app id="WebApp_ID" version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>My Application</display-name>

<servlet>
    <servlet-name>jersey-serlvet</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>my.app</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-serlvet</servlet-name>
    <url-pattern>/*</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>

サービス方法:

@POST
@Path("/request")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public ResponseInfo Request(RequestInfo requestInfo) 

ResponseInfo と RequestInfo の両方に @XmlRoot および @XmlElement アノテーションがあります。Tomcat 7.0.33 でローカルに実行していますが、次のエラーが発生します。

SEVERE: A message body reader for Java class           
my.app.RequestInfo, and Java type class my.app.RequestInfo, and MIME media type
application/json was not found.
The registered message body readers compatible with the MIME media type are:
application/json ->
  com.sun.jersey.json.impl.provider.entity.JSONJAXBElementProvider$App
  com.sun.jersey.json.impl.provider.entity.JSONRootElementProvider$App
  com.sun.jersey.json.impl.provider.entity.JSONListElementProvider$App
*/* ->
  com.sun.jersey.core.impl.provider.entity.FormProvider
  com.sun.jersey.core.impl.provider.entity.StringProvider
  com.sun.jersey.core.impl.provider.entity.ByteArrayProvider
  com.sun.jersey.core.impl.provider.entity.FileProvider
  com.sun.jersey.core.impl.provider.entity.InputStreamProvider
  com.sun.jersey.core.impl.provider.entity.DataSourceProvider
  com.sun.jersey.core.impl.provider.entity.XMLJAXBElementProvider$General
  com.sun.jersey.core.impl.provider.entity.ReaderProvider
  com.sun.jersey.core.impl.provider.entity.DocumentProvider
  com.sun.jersey.core.impl.provider.entity.SourceProvider$StreamSourceReader
  com.sun.jersey.core.impl.provider.entity.SourceProvider$SAXSourceReader
  com.sun.jersey.core.impl.provider.entity.SourceProvider$DOMSourceReader
  com.sun.jersey.json.impl.provider.entity.JSONJAXBElementProvider$General
  com.sun.jersey.core.impl.provider.entity.XMLRootElementProvider$General
  com.sun.jersey.core.impl.provider.entity.XMLListElementProvider$General
  com.sun.jersey.core.impl.provider.entity.XMLRootObjectProvider$General
  com.sun.jersey.core.impl.provider.entity.EntityHolderReader
  com.sun.jersey.json.impl.provider.entity.JSONRootElementProvider$General
  com.sun.jersey.json.impl.provider.entity.JSONListElementProvider$General
4

4 に答える 4

2

jackson-core-asl-1.9.2.jar にあるマーシャリングとアンマーシャリング用の JacksonJsonProvider.class が見つからないようです

于 2014-01-10T18:00:56.560 に答える
1

ObjectMapper クラスを追加する必要がある場合があります。たとえば、Jersey-Java サンプル アプリでは、クライアントがアカウントを作成する場合、サーバー上で次のロジックが実行されます。

@Path("/makeStormpathAccount")
public class StormpathAccount {

    @POST
    public void createAccount(UserAccount userAccount) throws Exception {

ルート メソッドのパラメーターとして (UserAccount userAccount) があることに注意してください。UserAccount クラスは次のようになります。

import org.codehaus.jackson.annotate.JsonProperty;

public class UserAccount {

    @JsonProperty
    private String first_name;

    @JsonProperty
    private String last_name;

    @JsonProperty
    private String user_name;

    @JsonProperty
    private String email;

    @JsonProperty
    private String password;


    public String getFirstName() {
        return first_name;
    }

    public String getLastName() {
        return last_name;
    }

    public String getUserName() {
        return user_name;
    }

    public String getEmail() {
        return email;
    }

    public String getPassword() {
        return password;
    }
} 

この ObjectMapper クラスを使用して、実際にデータをマップします。

import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.map.SerializationConfig;

import javax.ws.rs.ext.ContextResolver;
import javax.ws.rs.ext.Provider;

@Provider
public class MyObjectMapperProvider implements ContextResolver<ObjectMapper> {

    final ObjectMapper defaultObjectMapper;

    public MyObjectMapperProvider() {
        defaultObjectMapper = createDefaultMapper();
    }

    @Override
    public ObjectMapper getContext(Class<?> type) {
        return defaultObjectMapper;
    }

    private static ObjectMapper createDefaultMapper() {
        final ObjectMapper result = new ObjectMapper();
        result.configure(SerializationConfig.Feature.INDENT_OUTPUT, true);

        return result;
    }

}

クライアントから送信された JSON を直接 Java に変換します。

ソース: https://github.com/rkazarin/sample-jersey-webapp/tree/master/src/main/java/com/sample/jersey/app

于 2014-08-14T20:01:48.093 に答える
0

Genson ライブラリをクラスパスに追加してみてください。javaとjsonの変換を行うJavaライブラリです。ジャージーとの相性も抜群です。jar をクラスパスにドロップするだけです。

于 2012-12-19T16:23:30.993 に答える