使用swagger传递map类型的参数报错406

1、前言

最近在实现一个分页查询所有的用户及其角色的功能时,遇到了406的问题,费了好长时间才解决,记录一下解决方法。

2、排错过程

前后端分离的项目,写接口的时候我用到了swagger框架。先说下406是什么意思?

406:请求的资源的内容特性无法满足请求头中的条件,因而无法生成响应实体。实体格式由Content-Type头定义的媒体类型决定

解释一下:返回的消息头浏览器无法解释,下面是两种不同的消息头:

3、解决方法

  • 导入下面三个jar包
    ?

    <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.9.5</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core -->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>2.9.7</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-annotations -->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-annotations</artifactId>
            <version>2.9.7</version>
        </dependency>
  • 使用@ResponseBody注解
/**
     * 查询所有用户
     *
     * @param pn
     * @return
     */
    @SuppressWarnings("unchecked")
    @RequestMapping(value = "/userRoleList", method = RequestMethod.GET)
    @RequiresRoles(value = "超级管理员")
    @ResponseBody
    @ApiOperation(value = "查询所有用户", notes = "查询所有用户", httpMethod = "GET")
    public Msg UserRoleList(@RequestParam(value = "pn", defaultValue = "1") String pn,
            @RequestParam(value = "ps", defaultValue = "5") String ps) {
        // 1. 分页查询所有的用户
        PageHelper.startPage(Integer.parseInt(pn), Integer.parseInt(ps)); // 传入页码,每页大小
        List<Admin> admins = adminService.findAll();
        // 2. 根据用户名查询每个用户各自的角色
        List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
        for (Admin admin : admins) {
            List<Role> roles = adminService.findRoles(admin.getAdminName());
            //添加用户
            LinkedHashMap<String, Object> admin_roles = new LinkedHashMap<String,Object>();
            admin_roles.put("id", admin.getId());
            admin_roles.put("adminName", admin.getAdminName());
            admin_roles.put("name", admin.getName());
            admin_roles.put("createTime", admin.getCreateTime());
            admin_roles.put("lastLoginTime", admin.getLastLoginTime());
            admin_roles.put("locked", admin.getLocked()>0?true:false);
            //添加角色
            List<String> roleName = new ArrayList<String>();
            for (Role role : roles) {
                roleName.add(role.getName());
            }
            admin_roles.put("roles", roleName);
            //将用户及其角色存放的list中
            list.add(admin_roles);
        }
        // 3. 分页信息
        PageInfo page = new PageInfo(admins);
        return Msg.success().add("list", list).add("total", page.getTotal());
    }
  • 更改swagger版本为2.8

    <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.8.0</version>
        </dependency>

原文地址:http://blog.51cto.com/13416247/2322763

时间: 2024-10-12 15:05:46

使用swagger传递map类型的参数报错406的相关文章

单元测试时候使用[ClassInitialize]会该方法必须是静态的公共方法,不返回值并且应采用一个TestContext类型的参数报错的解决办法

using Microsoft.VisualStudio.TestTools.UnitTesting; 如果该DLL应用的是 C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\PublicAssemblies\Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll 版本为9.0.0.0 的话,则使用[ClassInitialize]会该方法必须是静态的公共方法,不返回值并且

帆软报表和jeecg的进一步整合--ajax给后台传递map类型的参数

下面是页面代码: <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@include file="/context/mytags.jsp"%> <% String deptIds = (String)request.getAttribute("departIds

jQuery 之 setTimeout 传递字符串参数报错

当你打算调用一些jQuery代码显示隐藏的一个元素,并调用setTimeout()在一段延时之后设置其HTML的内容: 整个页面的代码是这样的. <span style="font-size:18px;"><html> <head> <title></title> </head> <body> <a href="#" id='heihei' onclick="show

WebApi通过后端调用传递基础类型的参数

WebApi传递实体类型的参数,可以直接将实体序列化,然后写入请求流即可.传递基础类型的参数却不这么方便.以下是自己踩过的坑,分享出来给大家.调用的方式是通过后端,前端的没有总结.WebApi后端代码: public class UsersController : ApiController { private List<Users> _userList = new List<Users>() { new Users{ UserID=1, UserName="冯宝宝&qu

【spring mvc】后台spring mvc接收List参数报错如下:org.springframework.beans.BeanInstantiationException: Failed to instantiate [java.util.List]: Specified class is an interface

后台spring mvc接收List参数报错如下:org.springframework.beans.BeanInstantiationException: Failed to instantiate [java.util.List]: Specified class is an interface org.springframework.beans.BeanInstantiationException: Failed to instantiate [java.util.List]: Speci

spring mvc @ResponseBody http报错406

项目使用的是spring mvc 3.2.4 ,在使用到@ResponseBody 的时候出现http 406的错误,解决方法: 在pom.xml中添加上一下代码就ok了. <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.2.3</version> <

nuget包管理nuget服务器发布包时出现请求报错 406 (Not Acceptable)

在window服务器上部署nuget服务器时,发布包时出现请求报错 406 (Not Acceptable) 验证用户名.密码正确的情况下,还是出现上面错误.后面跟踪服务器日志,发现window\temp文件超过65535,删除过期临时文件后即可 原文地址:https://www.cnblogs.com/94cool/p/10749129.html

解决sqoop 导入oracle表时 --split-by参数为日期类型时的报错:ORA-01861: literal does not match format string

报错栈: 2017-06-08 18:46:13,422 INFO [main] org.apache.sqoop.mapreduce.db.DBRecordReader: Executing query: select "JFRQ","ZYH","FYKS","KSSE","YBJE","YPJE","ZJJE" from BSHIS."DEPCS_T_D

mybatis 中文做参数报错

一个简单的查询,如果参数中有中文.如下: <select id="xxxx" resultType="hashmap"> select * from talbe_a a where a.kpeople = ${name} </select> 报错: org.apache.ibatis.exceptions.PersistenceException: ### Error querying database. Cause: java.sql.SQ