【问题标题】:Posting dynamic JSON-Object to Spring RESTful Web Service将动态 JSON 对象发布到 Spring RESTful Web 服务
【发布时间】:2017-03-17 10:00:12
【问题描述】:

我正在尝试发布动态 JSON 对象,例如

{  
   "name":[  
      {  
         "key":"myKey1",
         "value":"myValue1"
      },
      {  
         "key":"myKey2",
         "value":myValue2
      },
      ....
   ]
}

到 Spring RESTful Web 服务,但我想将 JSON-Object 作为 JSON-Object 而不是 String 我的代码是:

    @RequestMapping(path ="/hi", method = RequestMethod.POST, consumes = "application/json")     
public Greeting hi(@RequestBody String jobject) {  
return new Greeting (100,jobject); 
}

【问题讨论】:

    标签: java json spring rest


    【解决方案1】:

    由于您需要键值对,您可以执行以下操作: 您可以定义一个包含地图的 POJO。如下所示:

    @RequestMapping(value = "/get/{searchId}", method = RequestMethod.POST)
    public String search(
    @PathVariable("searchId") Long searchId,
    @RequestParam SearchRequest searchRequest) {
     System.out.println(searchRequest.getParams.size());
     return "";
    }
    
    public class SearchRequest {   
    private Map<String, String> params;
    }
    

    请求对象:

    "params":{
         "birthDate": "25.01.2011",
        "lang":"en"       
     }
    

    【讨论】:

      【解决方案2】:

      创建一个与您的 json 相对应的 pojo 类。

      public class MyPojo
      {
          private Name[] name;
      
          public Name[] getName ()
          {
              return name;
          }
      
          public void setName (Name[] name)
          {
              this.name = name;
          }
      
          @Override
          public String toString()
          {
              return "ClassPojo [name = "+name+"]";
          }
      }
      
      public class Name
      {
          private String value;
      
          private String key;
      
          public String getValue ()
          {
              return value;
          }
      
          public void setValue (String value)
          {
              this.value = value;
          }
      
          public String getKey ()
          {
              return key;
          }
      
          public void setKey (String key)
          {
              this.key = key;
          }
      
          @Override
          public String toString()
          {
              return "ClassPojo [value = "+value+", key = "+key+"]";
          }
      }
      

      你可以使用一些在线的 json to pojo 转换器。我用 http://www.jsonschema2pojo.org/ 把 json 粘贴到那里然后点击转换。

      现在代替字符串指定您的 POJO 类,spring 将为您进行转换

      @RequestMapping(path ="/hi", method = RequestMethod.POST, consumes = "application/json")     
      public Greeting hi(@RequestBody MyPojo myPojo) {  
      
          // return new Greeting (100,jobject); 
      }
      

      【讨论】:

      • 它有效,但仍然有些混乱,为什么当我想直接打印对象而不使用覆盖方法时,它会给出对象“com.springRest.MyPojo@50d7cd7d”的引用?当我将数组的键从“名称”更改为其他时,会出现问题吗?
      • 打印,调用 toString() 方法。 myPojo.toString();。并且变量名应该与你的 json 中的键相同
      • 如果你声明一个 POJO 来描述一个 JSON,那么:这怎么是一个动态 JSON?
      【解决方案3】:

      您可以将其作为字符串获取并使用 JSON.parse 或类似的东西将其转换为 json !!或者你可以使用

      @RequestMapping(path ="/test", method = RequestMethod.POST, consumes = "application/json")     
      public myMethodehi(@RequestBody Pojo pojo) {  
      
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-12-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-18
        相关资源
        最近更新 更多