接口类的Controller,一般返回的是json数据,而Spring MVC中默认返回的string,而jsp页面的话,会按配置中自己行匹配转义字符串为对应的jsp文件。
@Controller
@RequestMapping("/user")
public class UserController { @RequestMapping(value = "/add", method = RequestMethod.GET)
@ResponseBody
public User addUser() {
User obj = new User();
obj.setId("321");
obj.setName("test");
return obj;
}
}
注意红色部分,@ResponseBody标识返回的是纯内容,如返回值是string的话,浏览器端会得到一个string,而不是去匹配相应的jsp文件。
我们返回的是json,所以@ResponseBody是必需的。
然后User是我们要序列化为json的对象,相应的转换由spring利用jackson在框架中进行。
接着看配置。
<!-- 配置自动扫描的包 -->
<context:component-scan base-package="com.awu.controllers" />
<mvc:annotation-driven/> <!-- 配置视图解析器 如何把handler 方法返回值解析为实际的物理视图 -->
<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
注意红色部分,当我们有Controller中需要处理json时,添加这个默认配置,如果显示的配置的话,也可以按如下配置。
<mvc:annotation-driven>
<mvc:message-converters>
<bean class="org.springframework.http.converter.StringHttpMessageConverter" />
<bean
class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter" />
</mvc:message-converters>
</mvc:annotation-driven>
Tip:开始用默认配置一直不对,会报java.lang.IllegalArgumentException: No converter found for return value of type。*上也没办法解决。通过显示配置,控制台输出了异常,才发现是jackson的jar包没有引用完全,开始只用了core,实际需要以下:
- jackson-core-**.jar
- jackson-databind-**.jar
- jackson-annotations-**.jar
我使用的是2.8.1的core和databind,annotations用的2.8.0。相应下载链接:
core: http://repo1.maven.org/maven2/com/fasterxml/jackson/core/jackson-core/
databind: http://repo1.maven.org/maven2/com/fasterxml/jackson/core/jackson-databind/
annotations: https://github.com/FasterXML/jackson-annotations/wiki