java - 带有 Java REST API 的泛型
问题描述
我在访问 REST API 项目中的泛型类的 get 方法时遇到问题。没有错误,但它返回 null。这里我提到了代码。当我在没有 REST API 的情况下实现时,这个想法运行良好。Insert 和 GetALL 方法在 REST API 中运行良好,但问题是 Repo 类 Get 方法无法与 REST 一起使用。
package lk.ac.jfn.vau.DeptApi.Model;
public class Department extends PrimaryID<Long>{
private String Name;
private String Location;
public Department() {
//super();
}
public Department(long id, String name, String location) {
super(id);
Name = name;
Location = location;
}
public String getName() {
return Name;
}
public void setName(String name) {
Name = name;
}
public String getLocation() {
return Location;
}
public void setLocation(String location) {
Location = location;
}
}
package lk.ac.jfn.vau.DeptApi.Model;
public class PrimaryID<U> {
private U Id;
public PrimaryID() {
}
public PrimaryID(U id) {
Id = id;
}
public U getId() {
return Id;
}
public void setId(U id) {
Id = id;
}
}
package lk.ac.jfn.vau.DeptApi.Repo;
import java.util.ArrayList;
import java.util.List;
import lk.ac.jfn.vau.DeptApi.Model.PrimaryID;
public class Repo<T extends PrimaryID<U>,U> {
List<T> list= new ArrayList<T>();
public List<T> getAll(){
return list;
}
public void insert(T obj) {
list.add(obj);
}
public T get(U id) {
for(T obj:list) {
//objects are there
System.out.println(obj);
//but getId returns null
if(obj.getId().equals(id)) {
return obj;
}
}
return null;
}
public void Delete(U id) {
list.remove(get(id));
}
public void Update(U id,T obj) {
list.set(list.indexOf(get(id)), obj);
}
}
package lk.ac.jfn.vau.DeptApi.Repo;
import lk.ac.jfn.vau.DeptApi.Model.Department;
public class DepartmentRepo extends Repo<Department, Long> {
}
package lk.ac.jfn.vau.DeptApi;
import java.util.List;
import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import lk.ac.jfn.vau.DeptApi.Model.Department;
import lk.ac.jfn.vau.DeptApi.Repo.DepartmentRepo;
@Path("/dept")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public class DepartmentResource {
private static DepartmentRepo repo = new DepartmentRepo();
@GET
public List<Department> getDepartments() {
return repo.getAll();
}
@POST
public void addDepartment(Department department) {
repo.insert(department);
}
@GET
@Path("/{id}")
public Department getDepartment(@PathParam("id") long id) {
return repo.get(id);
}
@DELETE
@Path("/{id}")
public void deleteDepartment(@PathParam("id") long id) {
repo.Delete(id);
}
}
解决方案
我发现了问题。问题是对象到 JSON 的转换。当我更新 JSON 库时,它运行良好。
<!-- https://mvnrepository.com/artifact/org.glassfish.jersey.media/jersey-media-json-jackson -->
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-json-jackson</artifactId>
</dependency>
推荐阅读
- r - R:所有变量值都相同
- css - 我应该在我的 CSS 中使用 -webkit-box-shadow 还是只使用 box-shadow?
- javascript - 如何使用 JavaScript 制作图像轮播,与 CSS 动画同步更改照片?
- flutter - Flutter Web-stable 每次运行 Web 应用程序时都会减少我的硬盘空间?
- r - 在 R 中,如何解析不同时区的日期格式。谢谢
- sum - 如何对字段的所有记录的所有值求和?(奥多 13)
- python - 展开 pygame 中制作的线框 3d 形状
- c++ - 如何在 lambda 函数中使用 QScopedPointer?
- python - 并非所有满足条件的元素都被删除
- javascript - HTML/JS 文本文件输出未保持我的 HTML 格式