【问题标题】:Spring MVC, parsing JSON without writing additional classesSpring MVC,解析 JSON 无需编写额外的类
【发布时间】:2015-11-22 06:52:03
【问题描述】:

我是 Spring MVC 的新手,正在尝试重写已经用 PHP 编写的应用程序。

我想将一个复杂的 JSON 字符串传递给 spring MVC 控制器(使用 AJAX post),以便它可以将其保存在数据库中。我只需要从控制器中的 JSON 中提取几个值,因此不想为整个结构创建类。

我只需要这个 JSON 对象中的 templateName 和 templateId。有没有办法从 JSON 对象中提取一些值。

我写了下面的 JSON 来举个例子:

Sample JSON Structure:

{
  "templateName": "template1",
  "templateId": "t01",
  "templateObj": {
    "name" : "mytemplate",
    "values": [1,2,3,4,5,6],
    "drawings": [
      "circle": {
      "radius": 20,
      "color" : "#f3f3f3",
      "border": 1
      },
      "rectangle":{
        "width": 20,
        "height": 40,
        "color": "#f1f1f1"
      }
    ]
  }
}


Javascript Code:

$.ajax({
	type: 'POST',
	url: url,
	data: JSON.stringify(templateObj),
    ...

Java 代码 -

@RestController 公共类 SaveChartConfigController {

@RequestMapping(value= "/saveChartConfig")
public @ResponseBody String processSaveChartConfig(@ModelAttribute JSONObject jsonObj) {

【问题讨论】:

    标签: ajax json spring-mvc


    【解决方案1】:

    其实你可以这样做:

    @RequestMapping(value= "/saveChartConfig")
    public @ResponseBody String processSaveChartConfig(@RequestBody String json) throws JsonParseException, JsonMappingException, IOException {
        Map<String, Object> jsonToMap = new ObjectMapper().readValue(json, Map.class);
        String templateName = (String) jsonToMap.get("templateName"); //here you get the parameters
        return templateName; //For example
    }
    

    杰克逊罐子:

    <dependency>
            <groupId>org.codehaus.jackson</groupId>
            <artifactId>jackson-mapper-asl</artifactId>
            <version>1.9.13</version>
        </dependency>
    <dependency>
            <groupId>org.codehaus.jackson</groupId>
            <artifactId>jackson-core-asl</artifactId>
            <version>1.9.13</version>
        </dependency>
    

    注意:import org.codehaus.jackson.map.ObjectMapper;

    但是,在您的情况下,它不起作用,因为您的 JSON 它不是有效的 JSON 对象。如果你解决了这个问题,那么上面的代码将解决你的问题。

    【讨论】:

    • 感谢您的回复拉斐尔。我收到一条错误消息,提示“无法将 ObjectMapper 解析为类型”。你能指点我正确的图书馆来解决这个问题吗?我相信我需要添加杰克逊罐子。这也适用于任何 JSON 结构(任何级别的嵌套)
    • 是的,它会的。但是,如果您需要另一个密钥中的某些内容,则必须执行类似的操作:Map&lt;String,String&gt; map = (Map) jsonToMap.get("templateName"); map.get("insideTemplateName")。好吧,请参阅我对杰克逊问题的编辑...希望对您有所帮助...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-09
    • 1970-01-01
    相关资源
    最近更新 更多