- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的问题是我想使用 Spring MVC 及其附带的标准注释将 Java 集合作为 JSON 返回。不幸的是,我每次都以 HTTP 错误代码 406 告终。
"The resource identified by this request is only capable of generating responses with characteristics not acceptable according to the request "accept" headers."
我认为 Jackson 和 Spring 可以自动转换我的返回类型,但如果我们使用集合或除 String
之外的任何其他返回类型,它会返回 HTTP 错误 406。你能帮我看看我做错了什么吗?
getAJsonString
) 有效,但第二个 (
getImprovedJsonMap
) 带有 map 返回 HTTP 错误代码 406,我们认为这是由于复杂类型造成的:
@Controller
@RequestMapping("/kfc/brands")
public class DefaultMetricsService {
@RequestMapping(value="/firstMethod", method = RequestMethod.GET)
public @ResponseBody String getAJsonString() {
return "HELLO";
}
@RequestMapping(value = "/Metrics/type3", method = RequestMethod.GET)
public @ResponseBody Map<String, String> getImprovedJsonMap() {
Map jsonMap = new HashMap<String, String>();
jsonMap.put("counter", "3000");
return jsonMap;
}
metrics-servlet.xml
:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation=
"http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.1.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd">
<context:component-scan base-package="com.t2" />
<mvc:annotation-driven />
</beans>
...
<!-- Dependency Versions -->
<org.slf4j.version>1.6.1</org.slf4j.version>
<spring.version>3.2.2.RELEASE</spring.version>
<commons.loggin.version>1.1.1</commons.loggin.version>
<junit.version>4.8.2</junit.version>
<jackson.version>1.9.10</jackson.version>
...
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${spring.version}</version>
<type>jar</type>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
<exclusions>
<!-- Exclude Commons Logging in favor of SLF4j -->
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>${commons.loggin.version}</version>
</dependency>
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.6</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
<type>jar</type>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
<type>jar</type>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${spring.version}</version>
<type>jar</type>
<scope>compile</scope>
</dependency>
<!-- Jackson JSON Mapper -->
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-core-asl</artifactId>
<version>${jackson.version}</version>
</dependency>
...
<servlet>
<servlet-name>metrics</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:metrics-application-context.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>metrics</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:metrics-servlet.xml</param-value>
</context-param>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
最佳答案
我认为您可能对 Spring 3.2 中的内容协商有疑问。参见 Spring documentation
尝试在您的 metrics-servlet.xml
中禁用它
<bean id="contentNegotiationManager" class="org.springframework.web.accept.ContentNegotiationManagerFactoryBean">
<property name="favorPathExtension" value="false" />
</bean>
关于java - 在使用 String 以外的东西时使用 Spring MVC、Jackson 和 REST 406。想要复杂的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18890266/
使用登录后,我想吐出用户名。 但是,当我尝试单击登录按钮时, 它给了我力量。 我看着logcat,但是什么也没显示。 这种编码是在说。 它将根据我在登录屏幕中输入的名称来烘烤用户名。 不会有任何密码。
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎是题外话,因为它缺乏足够的信息来诊断问题。 更详细地描述您的问题或include a min
我是一名优秀的程序员,十分优秀!