Spring MVC仅使用ContentNegotiationManagerFactoryBean返回json 406

NNikN

我只希望http://localhost:8090/home/home/home2针对Servlet上下文作为“ home”的任何请求都转向JSON响应

如果没有accept标头,我设置的配置将默认返回“ JSON”响应。我也尝试将接受类型设置为“ application / json”,这是行不通的。

Spring MVC + JSON = 406 Not Acceptable的解决方案是使用Messageconverter的另一种方法,而我正在尝试通过ContentNegotiationManagerFactoryBean类。

web.xml如下

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

    <servlet>
        <servlet-name>appServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>appServlet</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

</web-app>

servlet-context.xml如下。

<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/mvc"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:beans="http://www.springframework.org/schema/beans"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
    <context:component-scan base-package="com.andy.main" />


    <resources mapping="/resources/**" location="/resources/" />



    <beans:bean id="contentNegotiationManager" class="org.springframework.web.accept.ContentNegotiationManagerFactoryBean">
        <beans:property name="ignoreAcceptHeader" value="true"/>
        <beans:property name="defaultContentType" value="application/json" />

        <beans:property name="mediaTypes">
            <beans:map>
                <beans:entry key="json" value="application/json" />
                <beans:entry key="xml" value="application/xml" />
        </beans:map>
    </beans:property>
    </beans:bean>

    <annotation-driven content-negotiation-manager="contentNegotiationManager" />


</beans:beans>

Java代码如下:

package com.andy.main;

import java.util.HashMap;
import java.util.Locale;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

/**
 * Handles requests for the application home page.
 */
@Controller
@RequestMapping("/home")
public class HomeController {

    private static final Logger logger = LoggerFactory.getLogger(HomeController.class);

    /**
     * Simply selects the home view to render by returning its name.
     */
    @RequestMapping(value = "/home2" , method = RequestMethod.GET)
    public  @ResponseBody HashMap<String, String> home(Locale locale, Model model) {
        System.out.println("In Home2");
        logger.info("Welcome home! The client locale is {}.", locale);
        HashMap<String, String> allValues=new HashMap<String, String>();
        allValues.put("Doctor","Dr.John");
        allValues.put("Location", "location1");
        return allValues;
    }

}
杰克

如果您使用@ResponseBody或@RequestBody,则意味着默认情况下将激活Spring Message Conversions机制,并且ContentNegotiationManager无法控制。

但是,为什么MappingJackson2HttpMessageConverter(或早期版本的MappingJacksonHttpMessageConverter)不起作用?我猜您忘了添加杰克逊图书馆:

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Spring MVC仅使用ContentNegotiationManagerFactoryBean返回json 406

来自分类Dev

Spring 3.1.1和JSON出现错误406

来自分类Dev

HTTP状态406。Spring MVC 4.0,jQuery,JSON

来自分类Dev

HTTP状态406。Spring MVC 4.0,jQuery,JSON

来自分类Dev

使用Spring MVC在Ajax响应中获取406错误

来自分类Dev

Spring MVC测试框架-JSON端点仅在测试中返回406

来自分类Dev

Spring 4.1.1 RELEASE和@ResponseBody返回HTTP 406

来自分类Dev

使用JSON将HTTP 406错误升级到Spring MVC 4.1

来自分类Dev

Spring MVC总是返回406(已经在其他论坛中搜索过)

来自分类Dev

Spring MVC-以@ResponseBody的形式返回对象时出现问题(著名错误406,未解决)

来自分类Dev

Spring Security Http状态406

来自分类Dev

Spring Webservices给出406错误

来自分类Dev

406 Spring MVC Json,根据请求“接受”标头不可接受

来自分类Dev

错误406无法接受的Spring MVC 4 Extjs5 JSON响应

来自分类Dev

WebApi oData返回406

来自分类Dev

使用Spring 4.1实现基于JSON的REST API时出现错误406

来自分类Dev

Spring REST返回PDF-响应状态406(不可接受)

来自分类Dev

在 Spring Boot 中为自定义版本媒体类型返回 406

来自分类Dev

数据从 spring java 控制器返回到 angularjs 服务时出现 406 错误

来自分类Dev

我的 Spring Boot 服务器返回 406 Http 错误代码

来自分类Dev

Angular JS + Spring MVC:尝试下载生成的文件时出现 406

来自分类Dev

Spring 4.0.x JSON / Ajax HTTP / 1.1 406不可接受

来自分类Dev

@ResponseBody无法返回格式json错误406

来自分类Dev

非标准的Spring Boot RequestMapping返回JAXB带注释的对象时产生值返回406错误

来自分类Dev

非标准的Spring Boot RequestMapping返回JAXB带注释的对象时产生值返回406错误

来自分类Dev

当参数以(.pl)结尾时,为什么Spring MVC @RequestMapping会为映射(/user/{username:.+})抛出406错误

来自分类Dev

ODataController返回HTTP 406不可接受

来自分类Dev

406中的spring 4 ajax响应不可接受

来自分类Dev

Spring boot 1.5 consul 健康检查 406 错误(HttpMediaTypeNotAcceptableException)

Related 相关文章

  1. 1

    Spring MVC仅使用ContentNegotiationManagerFactoryBean返回json 406

  2. 2

    Spring 3.1.1和JSON出现错误406

  3. 3

    HTTP状态406。Spring MVC 4.0,jQuery,JSON

  4. 4

    HTTP状态406。Spring MVC 4.0,jQuery,JSON

  5. 5

    使用Spring MVC在Ajax响应中获取406错误

  6. 6

    Spring MVC测试框架-JSON端点仅在测试中返回406

  7. 7

    Spring 4.1.1 RELEASE和@ResponseBody返回HTTP 406

  8. 8

    使用JSON将HTTP 406错误升级到Spring MVC 4.1

  9. 9

    Spring MVC总是返回406(已经在其他论坛中搜索过)

  10. 10

    Spring MVC-以@ResponseBody的形式返回对象时出现问题(著名错误406,未解决)

  11. 11

    Spring Security Http状态406

  12. 12

    Spring Webservices给出406错误

  13. 13

    406 Spring MVC Json,根据请求“接受”标头不可接受

  14. 14

    错误406无法接受的Spring MVC 4 Extjs5 JSON响应

  15. 15

    WebApi oData返回406

  16. 16

    使用Spring 4.1实现基于JSON的REST API时出现错误406

  17. 17

    Spring REST返回PDF-响应状态406(不可接受)

  18. 18

    在 Spring Boot 中为自定义版本媒体类型返回 406

  19. 19

    数据从 spring java 控制器返回到 angularjs 服务时出现 406 错误

  20. 20

    我的 Spring Boot 服务器返回 406 Http 错误代码

  21. 21

    Angular JS + Spring MVC:尝试下载生成的文件时出现 406

  22. 22

    Spring 4.0.x JSON / Ajax HTTP / 1.1 406不可接受

  23. 23

    @ResponseBody无法返回格式json错误406

  24. 24

    非标准的Spring Boot RequestMapping返回JAXB带注释的对象时产生值返回406错误

  25. 25

    非标准的Spring Boot RequestMapping返回JAXB带注释的对象时产生值返回406错误

  26. 26

    当参数以(.pl)结尾时,为什么Spring MVC @RequestMapping会为映射(/user/{username:.+})抛出406错误

  27. 27

    ODataController返回HTTP 406不可接受

  28. 28

    406中的spring 4 ajax响应不可接受

  29. 29

    Spring boot 1.5 consul 健康检查 406 错误(HttpMediaTypeNotAcceptableException)

热门标签

归档