javax.ws.rs.core.Response 以集合作为实体
javax.ws.rs.core.Response with a collection as entity
我有以下代码:
@GET
@Path("v1/entity")
@ApiOperation(
value = "List",
notes = "Enables you to List.",
tags = { "List" })
@ApiImplicitParams(
{
@ApiImplicitParam(name = "pageSize",
value = "Page Size",
dataType = "int",
paramType = "formData",
example = "50"),
@ApiImplicitParam(name = "sortAscending",
value = "Sort Ascending",
dataType = "boolean",
paramType = "formData",
example = "false")
})
public Response list(@ApiParam(hidden = true) Integer pageSize,
@ApiParam(hidden = true) Boolean sortAscending) {
Collection<EntityData> dataCollection;
if (pageSize == null || sortAscending == null || pageSize <= 0) {
dataCollection = storeController.list();
} else {
SortDirection sortDirection = sortAscending ? SortDirection.ASC : SortDirection.DESC;
dataCollection= storeController.list(pageSize, sortDirection);
}
logger.info("List contains {} elements", dataCollection.size());
GenericEntity<Collection<EntityData>> response = new GenericEntity<Collection<EntityData>>(dataCollection){};
return Response.ok(response).build();
//return ResponseEntity.ok(dataCollection);
}
两种方法都来自 storeController
对象 return 一个 ArrayList
的 EntityData,其结构如下:
public class EntityData implements Serializable {
private String document;
private String validTo;
private String validFrom;
private String entityAlias;
public String getDocument() {
return document;
}
public void setDocument(String document) {
this.document= document;
}
public String getValidTo() {
return validTo;
}
public void setValidTo(String validTo) {
this.validTo = validTo;
}
public String getValidFrom() {
return validFrom;
}
public void setValidFrom(String validFrom) {
this.validFrom = validFrom;
}
public String getEntityAlias() {
return entityAlias;
}
public void setEntityAlias(String entityAlias) {
this.entityAlias = entityAlias;
}
}
当我调用 API 时,出现此错误:
No message body writer has been found for class java.util.ArrayList, ContentType: */*
我用了this as a reference,但是没用。我也尝试过,而不是使用 Response
来检索内容,而是使用 ResponseEntity<Collection<EntityData>>
,但错误仍然存在。就像在 Response
中直接使用“ArrayList
”一样(不在 GenericEntity
上换行)。
如果我将最后一行更改为 return Response.ok().build();
它可以工作,但我需要检索 Collection
... logger
表示当我运行.
我知道我在这里遗漏了一些东西,但我看不到它。你能帮帮我吗?
确保您的资源方法(或整个资源 class)被注释为:
@Produces("applicaton/json")
或;
@Produces(MediaType.APPLICATION_JSON)
.
然后确保您在 class 路径中有 JSON 提供者,例如 Jackson:
<dependency>
<groupId>com.fasterxml.jackson.jaxrs</groupId>
<artifactId>jackson-jaxrs-json-provider</artifactId>
<version>${jackson.version}</version>
</dependency>
根据 JAX-RS 实现的配置方式,添加 jackson-jaxrs-json-provider
artifact to your classpath is enough to use Jackson as a JSON provider. Otherwise you need to register JacksonJsonProvider
。
我有以下代码:
@GET
@Path("v1/entity")
@ApiOperation(
value = "List",
notes = "Enables you to List.",
tags = { "List" })
@ApiImplicitParams(
{
@ApiImplicitParam(name = "pageSize",
value = "Page Size",
dataType = "int",
paramType = "formData",
example = "50"),
@ApiImplicitParam(name = "sortAscending",
value = "Sort Ascending",
dataType = "boolean",
paramType = "formData",
example = "false")
})
public Response list(@ApiParam(hidden = true) Integer pageSize,
@ApiParam(hidden = true) Boolean sortAscending) {
Collection<EntityData> dataCollection;
if (pageSize == null || sortAscending == null || pageSize <= 0) {
dataCollection = storeController.list();
} else {
SortDirection sortDirection = sortAscending ? SortDirection.ASC : SortDirection.DESC;
dataCollection= storeController.list(pageSize, sortDirection);
}
logger.info("List contains {} elements", dataCollection.size());
GenericEntity<Collection<EntityData>> response = new GenericEntity<Collection<EntityData>>(dataCollection){};
return Response.ok(response).build();
//return ResponseEntity.ok(dataCollection);
}
两种方法都来自 storeController
对象 return 一个 ArrayList
的 EntityData,其结构如下:
public class EntityData implements Serializable {
private String document;
private String validTo;
private String validFrom;
private String entityAlias;
public String getDocument() {
return document;
}
public void setDocument(String document) {
this.document= document;
}
public String getValidTo() {
return validTo;
}
public void setValidTo(String validTo) {
this.validTo = validTo;
}
public String getValidFrom() {
return validFrom;
}
public void setValidFrom(String validFrom) {
this.validFrom = validFrom;
}
public String getEntityAlias() {
return entityAlias;
}
public void setEntityAlias(String entityAlias) {
this.entityAlias = entityAlias;
}
}
当我调用 API 时,出现此错误:
No message body writer has been found for class java.util.ArrayList, ContentType: */*
我用了this as a reference,但是没用。我也尝试过,而不是使用 Response
来检索内容,而是使用 ResponseEntity<Collection<EntityData>>
,但错误仍然存在。就像在 Response
中直接使用“ArrayList
”一样(不在 GenericEntity
上换行)。
如果我将最后一行更改为 return Response.ok().build();
它可以工作,但我需要检索 Collection
... logger
表示当我运行.
我知道我在这里遗漏了一些东西,但我看不到它。你能帮帮我吗?
确保您的资源方法(或整个资源 class)被注释为:
@Produces("applicaton/json")
或;@Produces(MediaType.APPLICATION_JSON)
.
然后确保您在 class 路径中有 JSON 提供者,例如 Jackson:
<dependency>
<groupId>com.fasterxml.jackson.jaxrs</groupId>
<artifactId>jackson-jaxrs-json-provider</artifactId>
<version>${jackson.version}</version>
</dependency>
根据 JAX-RS 实现的配置方式,添加 jackson-jaxrs-json-provider
artifact to your classpath is enough to use Jackson as a JSON provider. Otherwise you need to register JacksonJsonProvider
。