直接使用 Json 对象作为 Spring MVC 视图模型,无需将其转换为 Java 对象

问题描述 投票:0回答:0

我正在从事一个 spring MVC 项目,目前正在对后端服务进行新的 API 调用以获取响应并将其用作 Spring MVC ModelAndView 的 viewModel。

不过和传统流程不同的是,这次我不想先把json对象转为java POJO对象。相反,我想直接使用 json 对象作为 ModelAndView 的 viewModel。同时,我也想在jsp中像访问java POJO对象一样自然地访问json对象。这可能吗?

@RequestMapping(value = {SOME_VALUE})
public ModelAndView myFunction() {
  ModelAndView modelAndView = new ModelAndView("myViewName");
  //getAPIResponseASJsonObject() return json object, with frameworks, I can convert it to Gson JsonObject, or org.json JSONObject
  modelAndView.addObject("viewModel", getAPIResponseASJsonObject());
  
...
  return modelAndView

}

我知道在 jsp 中我可以使用 EL 访问 json 对象。但是如果我想将它与标准 JSTL taglib 结合起来,我需要使用一些“转义”机制。

// if I have a Json object "Person" as viewModel like below in jsp:

{
  "name": "john",
  "age": 30
}


// then in jsp file if I want to access the name property, I need to write jsp like this:

${Person.get("name")}

//or
<c:set var="name" value="${Person.get(\"name\")}">

与使用 Java POJO viewModel 相比,这看起来不自然。而且如果json对象复杂的话jsp可能会很难维护

有了Java POJO,我可以轻松写出

//Person POJO
public Class Person{
 private String name;
 private int age;

//getter and setter

}


<c:set var="name" value="${Person.name}">

访问名称属性。

我认为可能的解决方案:

  1. 假设我使用的是 Google Gson,我可以创建扩展 JsonElement 抽象类的 JsonObjectBean、JsonArrayBean、JsonPrimitiveBean,以便我“神奇地”将 json 对象 java 类转换为 java bean。
  2. 编写专用的 JSP 标签以避免使用转义。

有什么建议或更好的想法吗?谢谢。

spring spring-mvc jsp jsp-tags
© www.soinside.com 2019 - 2024. All rights reserved.