Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jersey 2.1-将POJO集合消费为JSON字符串_Jersey_Jax Rs_Jersey 2.0 - Fatal编程技术网

Jersey 2.1-将POJO集合消费为JSON字符串

Jersey 2.1-将POJO集合消费为JSON字符串,jersey,jax-rs,jersey-2.0,Jersey,Jax Rs,Jersey 2.0,我有一个实体集合(列表),需要将其转换为json或从json转换为json POJO: public class Task { private Long id; private String title; private Boolean done; (...) } Jersey产生以下结果 [{"id":1,"title":"T1","done":false},{"id":2,"title":"T2","done":false}] 当我调用该方法时: @

我有一个实体集合(列表),需要将其转换为json或从json转换为json

POJO:

public class Task {

    private Long id;

    private String title;

    private Boolean done;
    (...)
}
Jersey产生以下结果

[{"id":1,"title":"T1","done":false},{"id":2,"title":"T2","done":false}]
当我调用该方法时:

@GET
@Override
@Produces("application/json")
public List<Task> findAll() {
    (...)
    return tasks;
}
我做错了什么?这可能吗

泽西岛的属地:

<dependency>
    <groupId>javax.ws.rs</groupId>
    <artifactId>javax.ws.rs-api</artifactId>
    <version>2.0</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>org.glassfish.jersey.containers</groupId>
    <artifactId>jersey-container-servlet</artifactId>
    <version>2.1</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>org.glassfish.jersey.media</groupId>
    <artifactId>jersey-media-moxy</artifactId>
    <version>2.1</version>
</dependency>

javax.ws.rs
javax.ws.rs-api
2
假如
org.glassfish.jersey.containers
jersey容器servlet
2.1
假如
org.glassfish.jersey.media
泽西媒体公司
2.1
下面是web.xml配置

<servlet>
    <servlet-name>Jersey Servlet</servlet-name>
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
    <init-param>
        <param-name>jersey.config.server.provider.packages</param-name>
        <param-value>my.rest.package</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>

泽西Servlet
org.glassfish.jersey.servlet.ServletContainer
jersey.config.server.provider.packages
我的休息包
1.
泽西Servlet
/休息/*

或者,您可以接受传入的JSON作为字符串,并使用任何标准解析器在方法中解析它

@PUT
public void save(String s) {
   // parse s
}

之后类型参数不可用

尝试使用数组而不是列表:

@PUT
@Consumes("application/json")
public void save(Task[] taskArray) {
    List<Task> tasks = Arrays.asList(taskArray);
    (...)
}
@PUT
@使用(“应用程序/json”)
公共作废保存(任务[]任务数组){
List tasks=Arrays.asList(taskArray);
(...)
}

似乎您正在将损坏的JSON作为消息正文中的实体发送,类似于:

POST http://localhost:9998/test/list
Accept: application/json
Content-Type: application/json
"[{\"a\":\"a\",\"b\":1,\"c\":1}]"
我可以用如下实体得到与您相同的错误(
第1:0行在输入“'[{\'a\':\'a\',\'b\':1,\'c\':1}]”处没有可行的替代方案。

确保将有效的JSON发送到REST服务,即通过在应用程序中注册日志过滤器:

new ResourceConfig()
    .packages("my.rest.package")
    // Register logging filter and print entity.
    .register(new LoggingFilter(LOGGER, true));

如何将
任务
映射到JSON?您使用JAXB吗?如前所述,我将moxy模块添加到pom.xml中。json序列化很好,问题是反序列化。你搞定了!异常是由无效的JSON消息引起的。我调用了JSON.stringify()两次。我的错!
POST http://localhost:9998/test/list
Accept: application/json
Content-Type: application/json
"[{\"a\":\"a\",\"b\":1,\"c\":1}]"
new ResourceConfig()
    .packages("my.rest.package")
    // Register logging filter and print entity.
    .register(new LoggingFilter(LOGGER, true));