Java RESTful服务:无法使用json返回对象数组
这个样本是从谷歌发现的众多样本中提取出来的。 应用程序返回3个对象,但所有属性都为空 以下是控制器对象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
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;