json对象的字符串按照⼀定顺序输出
对接接⼝需要发送json数据,我想按照接⼝⽂档上的顺序,输出json,所以才有了这篇⽂章
刚开始⽤JSON(),⾥⾯直接放对象,dto⾥设置排序也不起作⽤,尝试各种⽅法后,所以先转json字符串,然后在转成对象时加上Feature.OrderedField,保证转成对象后顺序⼀致
本⽂中JSONObject⽤的版本是fastjson 1.2.68
DTO中加上@JSONType注解,orders⾥放的是json字符串的排序,@JSONField(format="yyyy-MM-dd HH:mm:ss")这个是因为有字段是⽇期类型的,进⾏处理。此处只设置⼀个DTO,另⼀个类似
@Data
@JSONType(orders={"serviceTime","zoning"})
public class EvaluatePersonDTO implements Serializable {
//服务时间
@JSONField(format="yyyy-MM-dd HH:mm:ss")
private Date serviceTime;
//区划
private  String zoning;
}
需要调⽤的类中,json对象放多个dto时,顺序会变化,加上设置JSONObject(true),保证出来对象顺序正常,
JSONObject applicationJson = new JSONObject(true);
EvaluatePersonDTO evaluatePersonDTO = new EvaluatePersonDTO();  //⼈员对象
evaluatePersonDTO.setBprArea("640101000000");                  //被评⼈所属区划
evaluatePersonDTO.setBprDept("研发部");                        //被评⼈所属部门
//
evaluatePersonDTO.Name());          //被评⼈所属部门--暂时没查询到
evaluatePersonDTO.LoginName());                //被评⼈员姓名
evaluatePersonDTO.Name());                      //被评⼈员姓名
evaluatePersonDTO.setIsApplication("0");    //是否关联办件
evaluatePersonDTO.setPjqd("");              //评价渠道
evaluatePersonDTO.setServiceTime(DateTime()));          //服务时间
evaluatePersonDTO.setZoning("640101000000");                    //区划
EvaluateWindowDTO evaluateWindowDTO = new EvaluateWindowDTO();  //窗⼝对象
evaluateWindowDTO.setCkDept("银川政务⼤厅");              //窗⼝所属部门
evaluateWindowDTO.Name());              //窗⼝所属部门
evaluateWindowDTO.setCkNumber("2");                            //窗⼝号
evaluateWindowDTO.setIsApplication("0");                        //是否关联办件
evaluateWindowDTO.setPjqd("");                                  //评价渠道
evaluateWindowDTO.setZoning("640101000000");                    //⾏政区划
applicationJson.put("personDTO",JSONObject.JSONString(evaluatePersonDTO), Feature.OrderedField));
applicationJson.put("windowDTO",JSONObject.JSONString(evaluateWindowDTO), Feature.OrderedField));
HttpHeaders headers = new HttpHeaders();
MediaType type = MediaType.parseMediaType("application/json; charset=UTF-8");
headers.setContentType(type);
headers.add("Accept", MediaType.String());
HttpEntity<String> formEntity = new HttpEntity<String>(String(), headers);
String s= restTemplate.dAndBadEvaluatePath,formEntity,String.c
lass).getBody();
最终结果,左侧是运⾏显⽰的部分json数据,右侧是接⼝⽂档部分字段,主要关注personDTO和windowDTO对象就⾏
object to

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。