当前位置: 首页 > 面试题库 >

在Spring-MVC中将JSON解析为Java对象

马庆
2023-03-14
问题内容

我熟悉如何@Controller使用@ResponseBody注释从我的方法返回json

现在,我试图将一些json参数读入我的控制器,但到目前为止还没有运气。这是我的控制器的签名:

@RequestMapping(value = "/ajax/search/sync")
public ModelAndView sync(@RequestParam("json") @RequestBody SearchRequest json) {

但是当我尝试调用此方法时,spring抱怨: Failed to convert value of type 'java.lang.String' to required type 'com.foo.SearchRequest'

删除@RequestBody注释似乎没有什么不同。

手动解析json是可行的,因此Jackson必须在类路径中:

// This works
@RequestMapping(value = "/ajax/search/sync")
public ModelAndView sync(@RequestParam("json") String json) {
    SearchRequest request;
    try {
        request = objectMapper.readValue(json, SearchRequest.class);
    } catch (IOException e) {
        throw new IllegalArgumentException("Couldn't parse json into a search request", e);
    }

有任何想法吗?我是否在尝试做不被支持的事情?


问题答案:

您的参数要么是一个@RequestParam或者 一个@RequestBody,不能同时使用。

@RequestBody用于POST和PUT请求,请求的主体就是您要解析的内容。@RequestParam用于命名参数,可以在URL上或作为多部分表单提交。

因此,您需要确定需要哪一个。您是否真的想将JSON作为请求参数?这通常不是AJAX的工作方式,通常是作为请求正文发送的。

尝试删除@RequestParam,看看是否可行。如果没有,并且您确实将JSON作为请求参数发布,那么Spring将无法在没有其他管道的情况下帮助您进行处理(请参阅定制WebDataBinder初始化)。



 类似资料:
  • 我在搜索中注意到,有一些标准格式对我很有用“”yyyy-mm-dd't'hh:mm:ss.sssz“”yyyy-mm-dd't'hh:mm:sss'z'“”eee,dd MMM yyyyhh:mm:sszzz“”yyyy-mm-dd“” 有没有明确地告诉它以某种方式进行解析?

  • 你好,我有以下任务: 具有JSON对象的URL: *通过注释定义如何将JSON定义到Java列表中,并找到其中有“名称”的对象。 我认为问题是在不使用任何java库的情况下解析JSON。到目前为止,我已经开发了以下代码: 我在这里做的是我有一个JSONObject类,它将JSON属性存储在映射中,然后我想使用反射来填充任何类。 为了解析JSON,我尝试创建一个迷你FSM(:)),它使用For循环解

  • 问题内容: 我有一个Spring MVC Servlet,我需要从JavaScript前端Web应用程序接受JSON。要解析JSON,我需要使用Jackson。我需要获取JSON中的值并将它们按在JSON中出现的顺序存储到列表中。我尝试过将JsonFactory与JsonParser和JsonNode对象一起使用,但是可以使其正常工作。我也尝试过打开BufferedReader并逐行遍历请求正文,

  • 问题内容: 我正在尝试使用mapper进行解析以将大JSON解析为java对象。我有一个很大的JSON,但遇到了其中的这一小片段,不确定如何解析。 这是JSON,其格式看起来几乎没有什么不同。我试图了解如何将其解析为对象。 我不知道它采用哪种格式,以及如何将其解析为对象。 问题答案: 这取决于你的身材有多大。如果可以将其加载到内存,则可以使用最简单的方法: 解决方案1: POJO类: 用法: 上面

  • 我是JSON新手,我真的很难用Java中的GSON解析这个布局 如果有帮助的话,是Redmine API为时间条目提供的输出。我正在努力理解一些基本的JSON概念,比如对象和数组,但我还没有找到一个布局类似的示例。 在使用我读过的教程时,我主要担心的是多个ID字段会混淆。 什么是最好的方式来分析这个问题而不束缚自己? 我不打算使用Gson,很乐意使用Jackson或内置库的解决方案。最终目标是An

  • 这里是我被困的地方,我在哪里创建我的新Gson()来在发送数据之前解析它?