![](/img/trans.png)
[英]How can I use a rest controller from a different package in Spring?
[英]How can I customize json output from spring rest controller
我有一个具有以下属性的POJO类患者:
public class Patient implements Serializable{
private static final long serialVersionUID = 2L;
private long id;
private String name;
private Date dob;
private String phoneNo;
private String email;
private Address address;
private String username;
private String password;
....
现在,从我的休息控制器中,我只需要在json中发送姓名,电话号码,电子邮件和患者地址。 我期望json输出为
{
"check":"Success",
"details":{
"name":"Test User",
"phoneNo":"9876544321",
"email":"test@gmail.com",
"address":"Address"
}
}
在此仅将成功/失败检查添加为标志。
只需创建另一个对象并将其用作静态控制器的响应即可;
public class PatientResponse implements Serializable {
private static final long serialVersionUID = 2L;
private Check check;
private Detail details;
// getter, setter, etc
public static class Detail {
private String name;
private String phoneNo;
private String email;
private String address;
// getters, setters, etc
}
public enum Check {
Success, Failure
}
}
和在控制器
@RestController
public class PatientController {
@GetMapping(...)
public PatientResponse get(...) {
Patient patient = ... // get patient somehow
return mapPatientToResponse(patient); // map Patient to PatientResponse here
}
}
Spring Boot使用Jackson进行JSON序列化和反序列化,请尝试使用@JSonIgnore(com.fasterxml.jackson.annotation.JsonIgnore)。
PatientDTO.java
public class PatientDTO {
private Check check;
@JsonIgnoreProperties(value = {"id", "dob", "username", "password"})
private Object details;
/* Getter & Setter */
public enum Check {
SUCCESS("Success"),
FAILURE("Failure");
private String name;
Check(String name) {
this.name = name;
}
@JsonValue
public String getName() {
return name;
}
}
}
控制器演示:
@RestController
@RequestMapping("/test")
public class TestController {
@GetMapping("/patient")
public PatientDTO getPatient() {
PatientDTO patientDTO = new PatientDTO();
patientDTO.setCheck(PatientDTO.Check.SUCCESS);
patientDTO.setDetails(new Patient());
return patientDTO;
}
}
使用http状态
@JsonInclude(JsonInclude.Include.NON_NULL)
public class Patient {
private long id;
private String name;
private Date dob;
private String phoneNo;
private String email;
private Address address;
private String username;
private String password;
/* Getter & Setter */
}
控制器演示:
@RestController
@RequestMapping("/test")
public class TestController {
@GetMapping("patient")
// or @ResponseStatus(HttpStatus.OK)
public ResponseEntity<Patient> patient() {
Patient patient = new Patient();
patient.setId(123);
patient.setName("123");
patient.setEmail("demo@demo.com");
patient.setPassword(null); // set to null to ignore password
return ResponseEntity.ok(patient);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.