一、普通文本、HTML返回值

// 普通文本
@Controller
public class UserController {
    @RequestMapping(value = "/plainText", produces = "text/plain; charset=UTF-8")
    @ResponseBody
    public String plainText() {
        return "This is 普通文本";
    }
}

// HTML
@RequestMapping(value = "/html", produces = "text/html; charset=UTF-8")
    @ResponseBody
    public String html() {
        return "<h1>This is 普通文本</h1>";
    }

二、XML返回值(有两种方式)

  • 手动拼接xml格式,繁琐易错
// 方法1
    @RequestMapping(value = "/xml1", produces = "application/xml; charset=UTF-8")
    @ResponseBody
    public String xml1() {
        Person person = new Person();
        person.setName("Tom");
        person.setAge(20);

        Car car = new Car();
        car.setName("BWM");
        car.setPrice(1234);
        person.setCar(car);
        // 加上xml的识别
        return "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
                + "<person name=\"" + person.getName() + "\" age = \"" + person.getAge() + "\">"
                + "<car name=\"" + car.getName() + "\" age = \"" + car.getPrice() + "\"/>"
                +"</person>";
    }
  • 引入三方库进行返回如下:
<!--模型转XML的库-->
        <dependency>
            <groupId>javax.xml.bind</groupId>
            <artifactId>jaxb-api</artifactId>
            <version>2.4.0-b180830.0359</version>
        </dependency>

        <dependency>
            <groupId>javax.xml</groupId>
            <artifactId>jaxb-impl</artifactId>
            <version>2.1</version>
        </dependency>

配置文件设置

<contexg:component-scan base-package="com.mj"/>
    <mvc:annotation-driven/>

类需要加上xml的注解

package com.mj.domain;

import com.sun.xml.txw2.annotation.XmlElement;

import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement(name = "person")
public class Person {
    private String name;
    private Integer age;
    private Car car;

    @XmlAttribute
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
    @XmlAttribute
    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    @XmlElement
    public Car getCar() {
        return car;
    }

    public void setCar(Car car) {
        this.car = car;
    }
}

测试类:

// 方法2
    @RequestMapping(value = "/xml2")
    @ResponseBody
    public Person xml2() {
        Person person = new Person();
        person.setName("Tom");
        person.setAge(20);

        Car car = new Car();
        car.setName("BWM");
        car.setPrice(1234);
        person.setCar(car);
        // 加上xml的识别
        return person;
    }

三、JSON数据格式返回(两种方式)

  • 直接手拼JSON字符串,如下
@RequestMapping(value = "/json1", produces = "application/json; charset=UTF-8")
    @ResponseBody
    public String json1() {
        return "{\"name\":\"\"Jack, \"age\":20},\"car:{\"name\":\"BWM\",\"price\":1234}}\"";
    }
  • 引入三方库,如下配置
<!-- Model转JSON字符串 -->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.11.2</version>
        </dependency>

配置文件

<?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:contexg="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd">

    <contexg:component-scan base-package="com.mj"/>
    <mvc:annotation-driven>
        <!--处理服务器返回的中文乱码问题-->
        <mvc:message-converters>
            <!--影响返回值是String的内容-->
            <bean class="org.springframework.http.converter.StringHttpMessageConverter">
                <property name="defaultCharset" value="UTF-8"/>
            </bean>

            <!--影响返回值是Model对象(最后通过JAXB转成XML字符串)-->
            <bean class="org.springframework.http.converter.xml.Jaxb2RootElementHttpMessageConverter">
                <property name="defaultCharset" value="UTF-8"/>
            </bean>
            
            <!--影响返回值是Model对象(最后通过Jackson转成JSON字符串)-->
            <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
                <property name="defaultCharset" value="UTF-8"/>
            </bean>
        </mvc:message-converters>
    </mvc:annotation-driven>

    <!--默认的转发方式-->
    <mvc:default-servlet-handler/>

</beans>

测试类:

@RequestMapping("/json2")
    @ResponseBody // 默认返回JSON
    public Student json2() {

        List<String> list = new ArrayList<String>();
        list.add("haha1");
        list.add("haha2");
        list.add("haha3");
        Student student = new Student();
        student.setName("xiaomage");
        student.setNickNames(list);
        student.setAge(12);

        Dog dog = new Dog();
        dog.setName("haha");
        dog.setPrice(123);
        student.setDog(dog);

        return student;
    }

 四、返回视图

  • 在viewName前面加上"redirect:"表示重定向,比如:"redirect:/page/jsp4.jsp"
  •  
  • 可以使用<mvc:view_controller>直接配置请求路径和viewName,如果以下两个都存在,会以java代码优先级高。也就是当没有Controller去处理这个path时才会交给配置文件。

<mvc:view-controller path="/jsp5" view-name="/WEB-INF/page/jsp5.jsp"/>@RequestMapping("/jsp5") public String jsp5() { // 转发 return "/WEB-INF/page/jsp4.jsp"; }

可以通过InternalResourceViewResolver设置试图路径的公共前缀、后缀,受InternalResourceViewResolver影响的有如下:

  • 通过返回值ModelAndView设置viewName
  • 通过返回值String设置的viewName
  • 通过<mvc:view-controller>设置的viewName

可以配置多个InternalResourceViewResolver

  • order值越小,优先级越高
  • 可以利用ModelAndView将数据和视图绑定到一起,返回给客户端 /* 在Java代码中,路径问题总结 1、假设请求路径是:"http://IP地址:端口/context_path/path1/path2/path3" 2、假设转发路径是:"/page/test.jsp" 1> 以斜线(/)开头,参考路径是context_path 2> 最终转发路径是:"http://IP地址:端口/context_path" + "/page/test.jsp" 3、假设转发路径是:"page/test.jsp" 1> 不以斜线开头,参考路径是当前请求路径的上一层路径 2> 最终转发路径是:"http://IP地址:端口/context_path/path1/path2" + "/page/test.jsp" 在jsp、html代码中、路径问题总结 1、假设请求路径是:"http://IP地址:端口/context_path/path1/path2/path3" 2、假设跳转路径是:"/page/test.jsp" 1> 以斜线(/)开头,参考路径是"http://IP地址:端口" 2> 最终转发路径是:"http://IP地址:端口" + "/page/test.jsp" 3、假设转发路径是:"page/test.jsp" 1> 不以斜线开头,参考路径是当前请求路径的上一层路径 2> 最终转发路径是:"http://IP地址:端口/context_path/path1/path2" + "/page/test.jsp"

@Controller @RequestMapping("/test") public class Jsp2Controller { @RequestMapping("/jsp1") public String jsp1() { return "jsp1"; } @RequestMapping("/jsp2") public ModelAndView jsp2() { return new ModelAndView("jsp2"); } }

以下两种情况不受InternalResourceViewResolver影响:

  • 在viewName前面加上"forward:"活"redirect:"
  • 通过ModeAndView的setView方法
• */
@Controller
public class JspController {

    @RequestMapping("/path1/jsp1")
    public ModelAndView jsp1() {
        ModelAndView mv = new ModelAndView();
        Dog dog = new Dog();
        dog.setName("大黄");
        dog.setPrice(200);
        // 本质就是request.setAttribute
        mv.addObject(dog);
        // 转发
        mv.setViewName("/page/jsp1.jsp");
        return mv;
    }
}

/*
 在Java代码中,路径问题总结
 1、假设请求路径是:"http://IP地址:端口/context_path/path1/path2/path3"
 2、假设转发路径是:"/page/test.jsp"
   1> 以斜线(/)开头,参考路径是context_path
   2> 最终转发路径是:"http://IP地址:端口/context_path" + "/page/test.jsp"
 3、假设转发路径是:"page/test.jsp"
   1> 不以斜线开头,参考路径是当前请求路径的上一层路径
   2> 最终转发路径是:"http://IP地址:端口/context_path/path1/path2" + "/page/test.jsp"
   
   
  在jsp、html代码中、路径问题总结
   1、假设请求路径是:"http://IP地址:端口/context_path/path1/path2/path3"
   2、假设跳转路径是:"/page/test.jsp"
        1> 以斜线(/)开头,参考路径是"http://IP地址:端口"
        2> 最终转发路径是:"http://IP地址:端口" + "/page/test.jsp"
   3、假设转发路径是:"page/test.jsp"
        1> 不以斜线开头,参考路径是当前请求路径的上一层路径
        2> 最终转发路径是:"http://IP地址:端口/context_path/path1/path2" + "/page/test.jsp"
*/
• 不加@ResponseBody的String返回值,也代表viewName
  • 可以利用ModelAndView将数据和视图绑定到一起,返回给客户端 /* 在Java代码中,路径问题总结 1、假设请求路径是:"http://IP地址:端口/context_path/path1/path2/path3" 2、假设转发路径是:"/page/test.jsp" 1> 以斜线(/)开头,参考路径是context_path 2> 最终转发路径是:"http://IP地址:端口/context_path" + "/page/test.jsp" 3、假设转发路径是:"page/test.jsp" 1> 不以斜线开头,参考路径是当前请求路径的上一层路径 2> 最终转发路径是:"http://IP地址:端口/context_path/path1/path2" + "/page/test.jsp" 在jsp、html代码中、路径问题总结 1、假设请求路径是:"http://IP地址:端口/context_path/path1/path2/path3" 2、假设跳转路径是:"/page/test.jsp" 1> 以斜线(/)开头,参考路径是"http://IP地址:端口" 2> 最终转发路径是:"http://IP地址:端口" + "/page/test.jsp" 3、假设转发路径是:"page/test.jsp" 1> 不以斜线开头,参考路径是当前请求路径的上一层路径 2> 最终转发路径是:"http://IP地址:端口/context_path/path1/path2" + "/page/test.jsp"

springboot将xml文件以流的方式返回给前端 springmvc返回xml数据_xml

  • 在viewName前面加上"redirect:"表示重定向,比如:"redirect:/page/jsp4.jsp"
  •  
  • 可以使用<mvc:view_controller>直接配置请求路径和viewName,如果以下两个都存在,会以java代码优先级高。也就是当没有Controller去处理这个path时才会交给配置文件。
<mvc:view-controller path="/jsp5" view-name="/WEB-INF/page/jsp5.jsp"/>@RequestMapping("/jsp5")
    public String jsp5() {
        // 转发
        return "/WEB-INF/page/jsp4.jsp";
    }

可以通过InternalResourceViewResolver设置试图路径的公共前缀、后缀,受InternalResourceViewResolver影响的有如下:

  • 通过返回值ModelAndView设置viewName
  • 通过返回值String设置的viewName
  • 通过<mvc:view-controller>设置的viewName

可以配置多个InternalResourceViewResolver

  • order值越小,优先级越高

springboot将xml文件以流的方式返回给前端 springmvc返回xml数据_mysql_02

@Controller
@RequestMapping("/test")
public class Jsp2Controller {

    @RequestMapping("/jsp1")
    public String jsp1() {
        return "jsp1";
    }


    @RequestMapping("/jsp2")
    public ModelAndView jsp2() {
        return new ModelAndView("jsp2");
    }

}


以下两种情况不受InternalResourceViewResolver影响:

  • 在viewName前面加上"forward:"活"redirect:"
  • 通过ModeAndView的setView方法

springboot将xml文件以流的方式返回给前端 springmvc返回xml数据_spring_03