我有一个用户列表类和一个返回用户列表和总记录的API。 课程如下:
@JsonInclude(JsonInclude.Include.NON_NULL)
public class FMSResponseInfo {
@JsonProperty("status")
private String status;
@JsonProperty("message")
private String message;
@JsonProperty("data")
private Object data;
@JsonProperty("status")
public String getStatus() {
return status;
}
@JsonProperty("status")
public void setStatus(String status) {
this.status = status;
}
@JsonProperty("message")
public String getMessage() {
return message;
}
@JsonProperty("message")
public void setMessage(String message) {
this.message = message;
}
@JsonProperty("data")
public Object getData() {
return data;
}
@JsonProperty("data")
public void setData(Object data) {
this.data = data;
}
}
@JsonInclude(JsonInclude.Include.NON_NULL)
public class UserListResDTO {
@JsonProperty("users")
private List<UserDTO> users;
@JsonProperty("totalRecords")
private long totalRecords;
public List<UserDTO> getUsers() {
return users;
}
public void setUsers(List<UserDTO> users) {
this.users = users;
}
public long getTotalRecords() {
return totalRecords;
}
public void setTotalRecords(long totalRecords) {
this.totalRecords = totalRecords;
}
}
我在FMSResponseInfo中设置了一个UserListResDTO类型的对象,如下所示。
到目前为止,我已经成功创建了Web服务并以json的形式返回响应。但我面临的问题是API返回响应如下: 的 {&#34;数据&#34;:&#34; org.package.UserListResDTO@70783307",&#34;消息&#34;:&#34;成功&#34;&#34;状态&#34;:&#34; 200&#34;}
这就是我编写Web服务的方式:
@Path("/getUsers")
@GET
@Produces(MediaType.APPLICATION_JSON)
public FMSResponseInfo getUsers(@QueryParam("page") @DefaultValue("0") int page) {
System.out.println("In getUsers()");
FMSResponseInfo fmsResponseInfo = new FMSResponseInfo();
try {
UserListResDTO userList = fmsUserManager.getAllUsers(page);
fmsResponseInfo.setData(userList);
fmsResponseInfo.setStatus(FMSErrorMessageEnum.SUCCESS_CODE.getValue());
fmsResponseInfo.setMessage(FMSErrorMessageEnum.SUCCESS_MESSAGE.getValue());
} catch (Exception e) {
return FMSUtil.getErrorResponseInfo(FMSErrorMessageEnum.INTERNAL_SERVER_ERROR_CODE.getValue(),
e.getMessage());
}
System.out.println("Out getUsers()");
return fmsResponseInfo;
}
我想依赖项或我无法解决的问题存在问题。我的pom中的主要依赖是:
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-servlet</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.7.2</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.7.2</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-moxy</artifactId>
</dependency>
我正在通过扩展Application类来创建Web服务,如下所示:
@ApplicationPath("rest")
public class FMSApplication extends Application {
public Set<Class<?>> getClasses(){
Set<Class<?>> set = new HashSet<Class<?>>();
set.add(FMSUserManagerWebService.class);
set.add(FMSDocumentManagerWebService.class);
set.add(FMSInboxManagerWebService.class);
set.add(FMSLocationManagerWebService.class);
return set;
}
}
任何帮助都会非常感激,因为我是这个REST Web服务的新手并且已经被困住了很长时间。
答案 0 :(得分:2)
此链接将解释答案
https://jersey.java.net/documentation/latest/media.html#d0e7963
9.1.1.1。 POJO支持
POJO支持代表了转换Java对象的最简单方法 到JSON然后回来。
支持这种方法的媒体模块是MOXy和Jackson
杰克逊的链接包括
9.1.4.1。依赖
要使用Jackson 2.x作为您的JSON提供程序,您需要添加 jersey-media-json-jackson模块到你的pom.xml文件
{{1}}
我对moxy不太了解,但是你的CLASSPATH上有杰克逊并且正在使用杰克逊的声音。然而泽西岛被配置为使用moxy。
来自链接
通过MOXy的JSON绑定支持是默认和首选的方式 自Jersey 2.0以来,在Jersey应用程序中支持JSON绑定。 当JSON MOXy模块位于类路径上时,Jersey将自动执行 发现模块并通过无缝启用JSON绑定支持 MOXy在您的应用程序中。
MOXy似乎处理了FMSResponseInfo。为什么它没有处理我不知道的其他对象。但既然你想使用杰克逊,那么你应该使用杰克逊模块。
答案 1 :(得分:0)
正如Shire Resident在使用以下依赖关系的评论中所建议的,我能够解决问题:
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-json-jackson</artifactId>
<version>2.22.2</version>
</dependency>