在休息api

时间:2018-06-18 06:50:25

标签: java java-ee collections

我正在编写用于构建输入请求主体的逻辑,该主体在调用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"}}

1 个答案:

答案 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();