首页 > 解决方案 > 带有 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);
    }

}

标签: javarestgenericsinheritancejax-rs

解决方案


我发现了问题。问题是对象到 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>

推荐阅读