如何在Java Springboot中创建列表的列表?

23 浏览
0 Comments

如何在Java Springboot中创建列表的列表?

我对Java和Spring Boot还不熟悉。我试着用Spring Boot创建一个CRUD应用程序。

我正在使用MySQL来存储数据。

员工模型 -

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name = "employees")
public class Employee {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long id;
    @Column(name = "first_name")
    private String firstName;
    @Column(name = "last_name")
    private String lastName;
    @Column(name = "email_id")
    private String emailId;
    public Employee() {
    }
    public Employee(String firstName, String lastName, String emailId) {
        super();
        this.firstName = firstName;
        this.lastName = lastName;
        this.emailId = emailId;
    }
    public long getId() {
        return id;
    }
    public void setId(long id) {
        this.id = id;
    }
    public String getFirstName() {
        return firstName;
    }
    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }
    public String getLastName() {
        return lastName;
    }
    public void setLastName(String lastName) {
        this.lastName = lastName;
    }
    public String getEmailId() {
        return emailId;
    }
    public void setEmailId(String emailId) {
        this.emailId = emailId;
    }
}

员工仓库 -

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import com.raksh.springboot.model.Employee;
@Repository
public interface EmployeeRepository extends JpaRepository {
}

员工控制器 -

import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.raksh.springboot.model.Employee;
import com.raksh.springboot.repository.EmployeeRepository;
@CrossOrigin(origins = "http://localhost:3000/")
@RestController
@RequestMapping("/api/v1/")
public class EmployeeController {
    @Autowired
    private EmployeeRepository employeeRepository;
    // 获取所有员工
    @GetMapping("/employees")
    public List getAllEmployees(){
        return employeeRepository.findAll();
    }
}

上述控制器以以下JSON对象数组的形式返回结果

[

{

"id": 1,

"firstName": "Tony",

"lastName": "Stark",

"emailId": "tony@gmail.com"

},

{

"id": 2,

"firstName": "Thor",

"lastName": "Odinson",

"emailId": "thor@asgard.com"

}

]

但我需要以下形式的响应

{

"total_items": 100,

"has_more": true,

"employees": {

"1": {

"id": 1,

"firstName": "Raksh",

"lastName": "Sindhe",

"emailId": "raksh@gmail.com"

},

"2": {

"id": 2,

"firstName": "Thor",

"lastName": "Odinson",

"emailId": "thor@asgard.com"

}

}

}

非常感谢帮助。

0
0 Comments

在Java Springboot中创建列表的列表的问题是需要将结果封装在DTO类中,并将其与响应一起传递回来。

问题的解决方法是创建一个名为ResponseDTO的类,该类包含三个属性:total_items、has_more和employees。total_items可以通过返回的列表的大小推断出来。has_more取决于是否使用带有repository调用的findAll()方法,如果是,则会获取数据库中的所有员工。否则,可能需要在repository中引入分页功能。employees属性则是将员工放入一个Map中。

下面是ResponseDTO类的示例代码:

public class ResponseDTO {
    private int total_items;
    private boolean has_more;
    private Map employees;
    
    public ResponseDTO(int totalItems, boolean hasMore, Map employees) {
        this.total_items = totalItems;
        this.has_more = hasMore;
        this.employees = employees;
    }
    
    //constructors, getters, and setters
}

另外,还需要创建一个EmployeeController类来处理员工相关的请求。下面是EmployeeController类的示例代码:

import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import com.raksh.springboot.model.Employee;
import com.raksh.springboot.repository.EmployeeRepository;
@RestController
public class EmployeeController {
    @Autowired
    private EmployeeRepository employeeRepository;
    @GetMapping("/employees")
    public List getAllEmployees(){
        // get all employees using repository
        List employees = employeeRepository.findAll();
        
        // create a map of employees
        Map employeeMap = getEmployeeMap(employees);
        
        // create a response DTO object and return
        return new ResponseDTO(employees.size(), false, employeeMap);
    }
    
    private Map getEmployeeMap(List employees){
        if(employees != null && !employees.isEmpty()){
            Map employeeMap = new HashMap<>();
            for(Employee emp : employees){
                employeeMap.put(emp.getId(), emp);
            }
            return employeeMap;
        }
        return null;
    }
}

以上是解决如何在Java Springboot中创建列表的列表的问题的方法。通过将结果封装在DTO类中,并使用Map来存储员工信息,可以方便地返回包含列表的列表的响应。

0
0 Comments

问题的原因是在Java Springboot中如何创建一个列表的列表。解决方法是创建一个EmployeeResponse模型,并添加所需的额外字段。可以使用list.size()计算total_items。对于另一个字段,可以通过对数据库进行额外的查询来计算行数,例如通过id列。如果行数大于100,则将该字段设置为true。可以在这里查看示例。如果在"findAll"方法中不限制为100行,并且实际上获取所有员工,然后移动除了100个外的所有员工,可以在不进行额外计数查询的情况下设置该字段。

0