1、entity类
public class Report{
private Long id;
private String name;
@JSONField(serialize = false)
@JsonIgnore
@OneToOne()
@JoinColumn(name = "maintenance_task_id", referencedColumnName = "id")
private Task task;
}
public class Task{
private Long id;
private String name;
@JSONField(serialize = false)
@JsonIgnore
@OneToOne(MappedBy="task")
private Report report;
}
接收单个对象转成的字符串
json字符串(ajax 中添加 Content-Type:application/json)
{"id":1,"name":"aaa"}
后台接收
@PostMapping("/test")
public Object save(@RequestBody Report report){
report=Rep.report().save(report);
return report;
}
2、接收对象集合转成的字符串
json字符串(ajax 中添加 Content-Type:application/json)
[{"id":1,"name":"aaa"},{"id":2,"name":"ccc"}]
后台接收
@PostMapping("/test")
public Object save(@RequestBody List reportList){
reportList=Rep.report().saveAll(reportList);
return reportList;
}
3、复杂对象
json字符串(ajax 中添加 Content-Type:application/json,去掉@JsonIgnore)
{"task":{"id":1,"name":"bbb"},"id":1,"name":"aaa"}
后台接收
@PostMapping("/test")
public Object save(@RequestBody Report report){
report=Rep.report().save(report);
return reportList;
}
4、解决复杂对象json序列化时的嵌套问题
方案1:getter上使用@JsonIgnore,setter上使用@JsonProperty
public class Report{
private Long id;
private String name;
@JSONField(serialize = false)
@OneToOne()
@JoinColumn(name = "maintenance_task_id", referencedColumnName = "id")
private Task task;
@JsonIgnore
public Task getTask() {
return task;
}
@JsonProperty
public void setTask(Task task) {
this.task = task;
}
}
方案2:属性上使用@JsonProperty(access = JsonProperty.Access.WRITE_ONLY) 表示序列化或反序列化时,该属性只写入。
@Getter
@Setter
public class Report{
private Long id;
private String name;
@JSONField(serialize = false)
@JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
@OneToOne()
@JoinColumn(name = "maintenance_task_id", referencedColumnName = "id")
private Task task;
}
5、jpa中,Jackson和FastJson的配合使用
jackson只读不序列化,fastjson不序列化,如需将复杂对象序列化,需要手动转换成map+list,再序列化。
6、controller中初始化时间格式
//初始化字符串时间为date时间
@InitBinder
public void initBinder(WebDataBinder binder, WebRequest request) {
//转换日期 注意这里的转化要和传进来的字符串的格式一致 如2015-9-9 就应该为yyyy-MM-dd
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, true));// CustomDateEditor为自定义日期编辑器
}
注意:Content-Type:application/json;@RequestBody 注解;@JsonIgnore注解;@JsonProperty注解;@JsonProperty(access = JsonProperty.Access.WRITE_ONLY) ;集合json字符串的格式
7、补充:json传递单参数让后台获取
json不需要什么格式,直接就是一个数字或字符串:
18
后台获取:
@RequestMapping("/test")
public void test(@RequestBody Integer age) {
System.out.println("age : " + age);//age这时候等于18
}