我正在编写用于构建输入请求主体的逻辑,该主体在调用Rest API时需要发送。我正在使用Map这样做,然后使用对象映射器,我将转换为json格式的字符串。
示例:示例输入请求正文
{ "A":{"1":"aa","2":"bb" },"B":{"3":"cc","4":"dd"}}
我的代码看起来像这样
MyReq req=new MyReq();
Map<String, String> A = Maps.newHashMap();
A.put("1","aa");
A.put("2","bb");
Map<String, String> B = Maps.newHashMap();
B.put("3","cc");
B.put("4","dd");
req.setA(A);
req.setB(B);
final ObjectMapper obj = new ObjectMapper();
String myjson=obj.writeValueAsString(req);
但是,在这种格式的情况下,我怎样才能做到这一点,
{"A":{"1":"aa","2":"bb"},"B":{"New":{"new1":"qq","new2","zz",},"3":"cc","4":"dd"}}
答案 0 :(得分:0)
您正在使用的地图和响应的基础对象代表简单的JSON对象(与数组相反,......)。您有很多选择来创建您描述的响应。要扩展您的示例,可以在JAXB中执行以下操作:
@XMLRootElement
public class MyReq {
....
@XmlElement(name = "3")
private String three;
但是在非描述性属性(如3)的情况下不要这样做如果响应被明确定义并经常使用和/或如果JAXB类用于其他部分,则使用JAXB应用程序(JPA bean,...)。
您还可以使用MyRec
替换班级Map<String,Object>
,只需将其他地图与其他值put("3","cc")
放在一起。
好的,请看一下 JSON-P API ,这是这个随机示例的最佳解决方案:
JsonObject response = Json.createObjectBuilder()
.add("A", Json.createObjectBuilder().add("1", "aa").add("2", "bb"))
.add("B", Json.createObjectBuilder().add("NEW", Json.createObjectBuilder().add("new1", "qq").add("new2", "zz")))
.add("3", "cc")
.add("4", "dd").build();