SpringMVC中“未找到类型为java.lang.Integer的返回值的转换器”
我的SpringMVC不能将整数或对象返回到页面,只有字符串可以返回到页面,我可以使用PrinterWriter将整数打印到页面,但不能返回整数 代码: 错误:SpringMVC中“未找到类型为java.lang.Integer的返回值的转换器”,java,spring,spring-mvc,Java,Spring,Spring Mvc,我的SpringMVC不能将整数或对象返回到页面,只有字符串可以返回到页面,我可以使用PrinterWriter将整数打印到页面,但不能返回整数 代码: 错误: No converter found for return value of type: class java.lang.Integer org.springframework.http.converter.HttpMessageNotWritableException: No converter found for return va
No converter found for return value of type: class java.lang.Integer
org.springframework.http.converter.HttpMessageNotWritableException: No converter found for return value of type: class java.lang.Integer
org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor.writeWithMessageConverters(AbstractMessageConverterMethodProcessor.java:233)
org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.handleReturnValue(RequestResponseBodyMethodProcessor.java:180)
org.springframework.web.method.support.HandlerMethodReturnValueHandlerComposite.handleReturnValue(HandlerMethodReturnValueHandlerComposite.java:82)
org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:122)
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:892)
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:797)
org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1039)
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:942)
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1005)
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:897)
javax.servlet.http.HttpServlet.service(HttpServlet.java:634)
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:882)
javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61)
org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)
org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)
org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)
org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)
org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:449)
org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:365)
org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)
org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)
org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:387)
org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:362)
org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)
org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:357)
org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:270)
org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:200)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
shiro没有问题,我在使用shiro之前就有这个问题
HelloWeb-servlet.xml:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
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.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<!-- freemarker config -->
<bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
<property name="templateLoaderPath" value="/WEB-INF/templates/"/>
</bean>
<bean id="viewResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
<property name="cache" value="true"/>
<property name="prefix" value=""/>
<property name="suffix" value=".ftl"/>
</bean>
<context:component-scan base-package="com.rtx" />
</beans>
Web.xml:
<servlet>
<servlet-name>HelloWeb</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>HelloWeb</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
spring-web-shiro.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"
default-lazy-init="true">
<description>Shiro Configuration</description>
<bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
<property name="realm" ref="myShiroRealm" />
<property name="cacheManager" ref="cacheManager" />
</bean>
<bean id="myShiroRealm" class="com.rtx.shiro.LoginRealm">
<property name="cacheManager" ref="cacheManager" />
</bean>
<!-- Shiro Filter -->
<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
<property name="securityManager" ref="securityManager" />
<property name="loginUrl" value="/index.jsp" />
<property name="successUrl" value="/user_page.php" />
<property name="unauthorizedUrl" value="/404.php" />
<property name="filterChainDefinitions">
<value>
/login.php =anon
/doLogin.action = anon
/** = authc
</value>
</property>
</bean>
<bean id="cacheManager" class="org.apache.shiro.cache.MemoryConstrainedCacheManager" />
<bean id="lifecycleBeanPostProcessor" class="org.apache.shiro.spring.LifecycleBeanPostProcessor" />
<bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator"
depends-on="lifecycleBeanPostProcessor">
<property name="proxyTargetClass" value="true" />
</bean>
<bean class="org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor">
<property name="securityManager" ref="securityManager" />
</bean>
</beans>
我的springMvc只能将字符串返回到页面,不能返回对象或整数,如何修复它?您可以返回ResponseEntity并将数据包装到其中,而不是返回整数
像这样的
@RequestMapping(value = "/Integer.action", method = {RequestMethod.GET,RequestMethod.POST})
public ResponseEntity<?> testInteger(){
return ResponseEntity.ok(5);
// return new ResponseEntity<Integer>(5, HttpStatus.OK);
}
如文档所述,当您使用@ResponseBody进行注释时,Spring将使用HttpMessageConverter
有关内置转换器的列表,请参阅。已启用转换器的默认列表包括:
ByteArrayHttpMessageConverter,将字节[]转换为应用程序/八位字节流
StringHttpMessageConverter,将字符串转换为文本/纯文本
ResourceHttpMessageConverter,将资源转换为动态媒体类型
ResourceRegionHttpMessageConverter,将ResourceRegion转换为动态媒体类型
SourceHttpMessageConverter,将源代码转换为application/xml、text/xml或application/*+xml
AllEncompassingFormHttpMessageConverter,将各种类型转换为application/x-www-form-urlencoded
Jaxb2RootElementHttpMessageConverter,将@XmlRootElement注释对象转换为application/xml、text/xml或application/*+xml
更多1
如您所见,它们都不支持整数对象的转换
解决此问题的最简单方法是将返回类型更改为String,并在Integer对象上调用toString
或者,如文档所示,添加自定义消息转换器
1可能会有更多启用的转换器,具体取决于安装了哪些Spring模块,例如,如果Jackson在场,您将获得JSON支持:
MappingJackson2HttpMessageConverter,将ObjectMapper支持的对象转换为application/json
AtomFeedHttpMessageConverter,将提要转换为应用程序/atom+xml
RssChannelHttpMessageConverter,将频道转换为应用程序/rss+xml
MappingJackson2SmileHttpMessageConverter,将ObjectMapper支持的对象转换为应用程序/x-jackson-smile
MappingJackson2CborHttpMessageConverter,将ObjectMapper支持的对象转换为应用程序/cbor
ResponseEntity仅支持与@ResponseBody注释方法的返回类型相同的对象类型,因为这两种方法都使用相同的HttpMessageConverter实现列表来进行到HTTP响应正文的转换。-此外,ResponseEntity是@ResponseBody的替代方案,所以不要两者都用。-正如上面所说:ResponseEntity类似于@ResponseBody,但有状态和标题。
@RequestMapping(value = "/Integer.action", method = {RequestMethod.GET,RequestMethod.POST})
public ResponseEntity<?> testInteger(){
return ResponseEntity.ok(5);
// return new ResponseEntity<Integer>(5, HttpStatus.OK);
}
@ResponseBody
@RequestMapping(value = "/Integer.action", method = {RequestMethod.GET,RequestMethod.POST})
public String testInteger(){
Integer a = 1;
return a.toString();
}