Java RESTful服务:无法使用json返回对象数组

Java RESTful服务:无法使用json返回对象数组,java,arrays,json,rest,Java,Arrays,Json,Rest,这个样本是从谷歌发现的众多样本中提取出来的。 应用程序返回3个对象,但所有属性都为空 以下是控制器对象 import java.net.URI; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; import

这个样本是从谷歌发现的众多样本中提取出来的。 应用程序返回3个对象,但所有属性都为空

以下是控制器对象

import java.net.URI;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.support.ServletUriComponentsBuilder;

@RestController
@RequestMapping(path = "/employees")
public class EmployeeController 
{
    @Autowired
    private EmployeeDAO employeeDao;

    @GetMapping(path="/", produces = "application/json")
    public Employees getEmployees() 
    {
        return employeeDao.getAllEmployees();
    }

    @PostMapping(path= "/", consumes = "application/json", produces = "application/json")
    public ResponseEntity<Object> addEmployee(@RequestBody Employee employee) 
    {
        Integer id = employeeDao.getAllEmployees().getEmployeeList().size() + 1;
        employee.setId(id);

        employeeDao.addEmployee(employee);

        URI location = ServletUriComponentsBuilder.fromCurrentRequest()
                                    .path("/{id}")
                                    .buildAndExpand(employee.getId())
                                    .toUri();

        return ResponseEntity.created(location).build();
    }
}
根据要求,这里是Employee类

import javax.annotation.ManagedBean;

import org.springframework.web.context.annotation.ApplicationScope;

import lombok.Data;
import lombok.Getter;
import lombok.Setter;

//@ManagedBean
//@ApplicationScope
//@Data

public class Employee {


    public Employee() {

    }
    public Employee(Integer id, String firstName, String lastName, String email) {
        super();
        this.id = id;
        this.firstName = firstName;
        this.lastName = lastName;
        this.email = email;
    }

    @Setter  @Getter  private Integer id;
    private String firstName;
    private String lastName;
    private String email;

    //Getters and setters

    @Override
    public String toString() {
        return "Employee [id=" + id + ", firstName=" + firstName + ", lastName=" + lastName + ", email=" + email + "]";
    }
}
这是部分客户端代码

    private static void getEmployees() 
    {

        // HttpHeaders
        HttpHeaders headers = new HttpHeaders();

        headers.setAccept(Arrays.asList(new MediaType[] { MediaType.APPLICATION_JSON }));
        // Request to return JSON format
        headers.setContentType(MediaType.APPLICATION_JSON);
        headers.set("my_other_key", "my_other_value");

        // HttpEntity<String>: To get result as String.
        HttpEntity<String> entity = new HttpEntity<String>(headers);

        // RestTemplate
        RestTemplate restTemplate = new RestTemplate();

        // Send request with GET method, and Headers.
        ///This works but only prints IDs.        
        ResponseEntity<String> response = restTemplate.exchange(URL_EMPLOYEES, HttpMethod.GET, entity, String.class);
        String result = response.getBody();
        System.out.println(result);

        HttpEntity<Employees> entity2 = new HttpEntity<Employees>(headers);
      ResponseEntity<Employees> eResponse = restTemplate.exchange(URL_EMPLOYEES, HttpMethod.GET, entity2, Employees.class);
      List <Employee> eList = eResponse.getBody().getEmployeeList();
      for (Employee e : eList)
      {
          System.out.println(e.toString());
      }
   }
private static void getEmployees()
{
//HttpHeader
HttpHeaders=新的HttpHeaders();
setAccept(Arrays.asList(newmediatype[]{MediaType.APPLICATION_JSON}));
//请求返回JSON格式
headers.setContentType(MediaType.APPLICATION_JSON);
headers.set(“my_other_key”、“my_other_value”);
//HttpEntity:以字符串形式获取结果。
HttpEntity=新的HttpEntity(标题);
//RestTemplate
RestTemplate RestTemplate=新RestTemplate();
//使用GET方法和头发送请求。
///这可以工作,但只打印ID。
ResponseEntity response=restemplate.exchange(URL\u EMPLOYEES,HttpMethod.GET,entity,String.class);
字符串结果=response.getBody();
系统输出打印项次(结果);
HttpEntity entity2=新的HttpEntity(标头);
ResponseEntity eResponse=restTemplate.exchange(URL_EMPLOYEES,HttpMethod.GET,entity2,EMPLOYEES.class);
List eList=ereresponse.getBody().getEmployeeList();
对于(员工e:eList)
{
System.out.println(例如toString());
}
}
从上面来看,下面的调用可以工作并打印出3个ID

    ResponseEntity<String> response = restTemplate.exchange(URL_EMPLOYEES, HttpMethod.GET, entity, String.class);
    String result = response.getBody();
    System.out.println(result);
ResponseEntity response=restemplate.exchange(URL\u EMPLOYEES,HttpMethod.GET,entity,String.class);
字符串结果=response.getBody();
系统输出打印项次(结果);
返回ID后,下一步是使用下一组调用打印每个员工的所有属性

  ResponseEntity<Employees> eResponse = restTemplate.exchange(URL_EMPLOYEES, HttpMethod.GET, entity, Employees.class);
  List <Employee> eList = eResponse.getBody().getEmployeeList();
  for (Employee e : eList)
  {
      System.out.println(e.toString());
  }
ResponseEntity eResponse=restemplate.exchange(URL\u EMPLOYEES,HttpMethod.GET,entity,EMPLOYEES.class);
List eList=ereresponse.getBody().getEmployeeList();
对于(员工e:eList)
{
System.out.println(例如toString());
}
我在执行列表调用的行上放置了一个断点,并验证了eResponse对象在列表中有3个项,但所有3个项都显示它们的每个关联属性为NULL


由于我确认在第一次调用中返回ID后调用似乎正常工作,第二次调用缺少什么命令或设置来允许返回完整的对象?

我认为您应该删除super();在构造函数中。我们使用它来访问超级类的成员。您的Employee类没有父类

以下是为使其正常工作而更改的3个重要部件

1-服务器端-此过程没有任何实际变化

@GetMapping(path="/", produces = "application/json")
public Employees getEmployees() 
{
    return employeeDao.getAllEmployees();
}
2-客户端-简化了它

private static void getEmployees() 
{

    HttpHeaders headers = new HttpHeaders();
    headers.setAccept(Arrays.asList(new MediaType[] { MediaType.APPLICATION_JSON }));
    headers.setContentType(MediaType.APPLICATION_JSON);
    headers.set("my_other_key", "my_other_value");
    HttpEntity<Employee> entity = new HttpEntity<>(null,headers);
    ResponseEntity<String>result = restTemplate.exchange(URL_EMPLOYEES, HttpMethod.GET, entity, String.class);
    System.out.println(result);
 }
一旦我改成下面的,它就成功了

@Setter  @Getter private Integer id;
@Setter  @Getter private String firstName;
@Setter  @Getter private String lastName;
@Setter  @Getter private String email;
仍然不是100%的真实情况,但它是有效的

private static void getEmployees() 
{

    HttpHeaders headers = new HttpHeaders();
    headers.setAccept(Arrays.asList(new MediaType[] { MediaType.APPLICATION_JSON }));
    headers.setContentType(MediaType.APPLICATION_JSON);
    headers.set("my_other_key", "my_other_value");
    HttpEntity<Employee> entity = new HttpEntity<>(null,headers);
    ResponseEntity<String>result = restTemplate.exchange(URL_EMPLOYEES, HttpMethod.GET, entity, String.class);
    System.out.println(result);
 }
@Setter  @Getter private Integer id;
private String firstName;
private String lastName;
private String email;
@Setter  @Getter private Integer id;
@Setter  @Getter private String firstName;
@Setter  @Getter private String lastName;
@Setter  @Getter private String email;