微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SpringMVC响应数据和视图

SpringMVC响应数据和视图

一 、返回页面文件

1. 返回逻辑视图

  1. 方法返回的字符串,和视图解析器里的前缀、后缀拼接得到真实路径,再进行跳转
  2. 请求是转发跳转

2. 返回带前缀的物理视图 (不受视图解析器的影响)

  1. 请求转发:forward:/success.jsp
  2. 重定向:redirect:/success.jsp

3. 方法返回ModelAndView

public ModelAndView jump(){
    ModelAndView mav = new ModelAndView();
    mav.setViewName("视图名称");
    mav.addobject("数据名称", "值");
    return mav;
}

public ModelAndView jump(ModelAndView mav){
    mav.setViewName("视图名称");
    mav.addobject("数据名称", "值");
    return mav;
}

4. 方法返回String:视图名称

public String jump(Model model){
    model.addAttribute("数据名称", "值");
    return "视图名称";
}

二、返回数据

1. 直接响应字符串

  1. 使用Servlet原生的response对象,返回响应数据
  2. 方法上使用@ResponseBody注解,springmvc就会把方法的返回值当成字符串来看待,不会再识别成页面的地址路径
	/*
        返回字符串: 使用response对象写出去
     */
    @RequestMapping("/returnStr01")
    public void returnStr01(HttpServletResponse resp) throws IOException {
        resp.getWriter().write("str01...");
    }


    /*
        返回字符串: 使用@ResponseBody,打注解,告诉springmvc,方法的返回值是字符串,不是页面
     */
    @ResponseBody
    @RequestMapping("/returnStr02")
    public String returnStr02()  {
       return  "str02...";
    }
  • 如果使用@ResponseBody响应的中文字符串,即使配置了CharacterEncodingFilter,也会有乱码。
  • 解决方法:在springmvc.xml里配置如下:
  • 配置SpringMVC的StringHttpMessageConverter进行字符串处理转换,设置采用utf-8字符集。
<mvc:annotation-driven>
        <!--
        配置消息转换器:
            1. 当我们的方法上打上了@ResponseBody,返回字符串的时候,里面有中文,就会出现乱码的问题
            2. 即便我们在web.xml中配置了中文乱码的过滤器,也不能解决。
            3. 需要配置下面的这段消息转换器 , 这段配置一旦写就,即对全局的项目产生影响。
        -->

        <mvc:message-converters>
            <bean class="org.springframework.http.converter.StringHttpMessageConverter">

                <!--指定认的编码-->
                <property name="defaultCharset" value="utf-8"/>

                <!--指定支持内容类型和编码-->
                <property name="supportedMediaTypes">
                    <list>
                        <value>text/html;cahrset=utf-8</value>
                        <value>application/json;cahrset=utf-8</value>
                        <value>text/plain;cahrset=utf-8</value>
                    </list>
                </property>
            </bean>
        </mvc:message-converters>
    </mvc:annotation-driven>

2. 返回json数据

  1. 自己把JavaBean对象转换成json格式的字符串,响应给客户端。
  2. 方法返回JavaBean对象,使用@ResponseBody注解Springmvc帮我们转换成json格式。
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.9.6</version>
</dependency>

使用示例

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.itheima.bean.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/*
    返回数据 : json数据
 */
@Controller
public class Controller04 {
    /*
        返回json字符串
            1. 自己转化成json字符串,然后返回
     */
    @ResponseBody
    @RequestMapping("/returnjson01")
    public String returnjson01() throws JsonProcessingException {
        System.out.println("returnjson01...");
        //1. 创建对象
        User user = new User("admin" , "123456");
        //2. 转化成json
        ObjectMapper om = new ObjectMapper();
        String json = om.writeValueAsstring(user);
        //3. 返回json
        return json;
    }
    /*
        返回json字符串
            1. 不需要我们自己转化对象成json字符串。
            2. 只需要返回对象即可。
     */
    @ResponseBody
    @RequestMapping("/returnjson02")
    public User returnjson02() throws JsonProcessingException {
        System.out.println("returnjson02...");
        //1. 创建对象
        User user = new User("管理员" , "123456");
        //2. 直接返回2
        return user;
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐