相关疑难解决方法(0)

如何使用JAXB使用Jersey 1.6生成JSON输出

@XmlRootElement
public class Todo {
    private String s = "test";

    public String getS() {
        return s;
    }

    public void setS(String s) {
        this.s = s;
    }

}
Run Code Online (Sandbox Code Playgroud)

和服务:

@Path("/test")
public class Service {

    @GET
    @Produces({MediaType.APPLICATION_JSON })
    public List<Todo> getAllGadgets() {
        return Arrays.asList(new Todo[] { new Todo() });
    }

}
Run Code Online (Sandbox Code Playgroud)

我的web.xml:

<servlet>
    <servlet-name>Jersey REST Service</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.test</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>Jersey REST Service</servlet-name>
    <url-pattern>/rest/*</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)

如果我将MediaType.APPLICATION_XML设置为生成注释,则所有这些都有效.但对于JSON,我得到以下异常:

严重:映射异常响应:500(内部服务器错误)javax.ws.rs.WebApplicationException:com.sun.jersey.api.MessageException:Java类java.util.Arrays $ ArrayList和Java类型java的消息体编写器找不到.util.List和MIME媒体类型application/json

我使用Jersey 1.6,根据教程,JSON格式应该可以在没有任何额外编程的情况下使用JAXB.怎么了?

java rest json jax-rs jackson

27
推荐指数
4
解决办法
4万
查看次数

Maven部署:找不到Java类java.lang.String(...)的消息体编写器

我和小组刚从一些没有时间继续的人手中接过了一个开发项目.该项目包括一个使用jersey和jetty的RESTful服务器,以及一个java客户端.不幸的是,它们不可用,我们一直试图部署服务器.

他们一直在使用eclipse进行开发,而对于服务器项目,maven已经被用来处理依赖关系.他们没有使用maven来部署.jar文件,但是他们只是通过eclipse提取它们.

我们使用maven-install创建了一个jar文件,只是通过Eclipse导出.在这两种情况下,我们设法启动并运行,但是当我们启动客户端时,我们在服务器上收到以下错误:

Caused by: com.sun.jersey.api.MessageException: A message body writer for Java class java.lang.String, and Java type class java.lang.String, and MIME media type text/plain was not found
Run Code Online (Sandbox Code Playgroud)

如果我们尝试通过常规浏览器访问Web服务,也会发生同样的情况.

但是,当通过Eclipse运行项目时,如"运行方式" - >"Java应用程序",它可以工作.

我已经阅读了很多帖子,包括Java类的消息体编写器......并且找不到MIME媒体类型text/html,并且我添加了jersey-json依赖项,但是发生了同样的错误.

资源以这种方式定义:

@Path("/{token}/users")
public class Users {

@GET
@Path("/show/{username}")
@Produces("text/plain")
public String getUser(@PathParam("username") String username, 
                      @PathParam("token") String token) {
(...)

}
Run Code Online (Sandbox Code Playgroud)

我们还没有研究过实际的HTTP请求/响应,但是如果有人认为来自那些的任何信息会很有趣,那么可能会这样做.

谢谢你的帮助!任何输入都表示赞赏!

编辑:使用maven-assembly进行部署,POM文件包含此(以及更多):

 <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-assembly-plugin</artifactId>
    <configuration>
        <descriptorRefs>
            <descriptorRef>jar-with-dependencies</descriptorRef>
        </descriptorRefs>
        <archive>
            <manifest>
                <mainClass>no.abakus.backup.abacash.webservice.AbaCashCoreLauncher</mainClass>
            </manifest>
        </archive>
    </configuration>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>single</goal>
            </goals>
        </execution>
    </executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)

java eclipse jetty jersey maven

3
推荐指数
1
解决办法
5700
查看次数

标签 统计

java ×2

eclipse ×1

jackson ×1

jax-rs ×1

jersey ×1

jetty ×1

json ×1

maven ×1

rest ×1