【问题标题】:SpringMvc controller to returns JSON, displays error: HTTP status 406SpringMvc 控制器返回 JSON,显示错误:HTTP 状态 406
【发布时间】:2016-06-10 21:27:05
【问题描述】:

我正在通过编写一些 webapp 代码来学习 spring 4.2.4。想法是通过控制器返回 json 文件。 几天前我已经发布了我的问题,但我仍然无法为我的案例获得正确的建议。我正在尝试 stackoverfolow 给出的所有建议,但没有一个建议对我有用。这是我的控制器: .....

@RequestMapping(value="/getmessages",method=RequestMethod.GET,    produces="application/json")
 @ResponseBody
 public Map<String,Object> getMessage(Principal prinicipal){

    List<Message>message=null;
    if(prinicipal==null){
        message=new ArrayList<Message>();

    }
    else{
        String username=prinicipal.getName();
        message=usersService.getMessage(username);
    }

    Map<String,Object> data= new HashMap<String,Object>();
    data.put("message", message);
    data.put("number", message.size());
    System.out.println("message has to be her\n"+message);
    System.out.println("Number  message has to be her is..."+message.size());
    return data;
}

要从mysql中检索的消息内容正确显示在控制台中。 问题是转换为 JSON 并返回结果。我一直在尝试将 jackson 1.9.x jar 更改为 jackson-fasterxml-2.x,但它不起作用。 servlet 的所有其他可能配置也对我不起作用。 当我添加jackson-fasterxml-databind ....它显示文件名“getmessages”的文件下载对话框。下载并保存...

非常感谢您的帮助。

【问题讨论】:

    标签: json spring model-view-controller controller


    【解决方案1】:

    最后我解决了这个问题如下: 我将返回类型从 MAP 更改为 String,并在 CONTROLLER 中将 MAP 转换为 String:

    1. 将我的地图转换为字符串:

         ObjectMapper mapper = new ObjectMapper();
        String jsonFromMap = mapper.writeValueAsString(data);
      
    2. 我还将依赖项更改为:

         <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-annotations</artifactId>
         <version>2.2.3</version>
         </dependency>
      
       <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.2.3</version>
      </dependency>
       <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-core</artifactId>
      <version>2.2.3</version>
      

    3. @RequestMapping 内部变化

          produces=application/json
      

        produces=text/html
      

    我认为问题在于浏览器无法理解 application/json 并返回 Map............ 无论如何我做了我想做的事——尽管我不知道我是怎么做到的!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-15
      • 2022-02-09
      • 1970-01-01
      相关资源
      最近更新 更多