SpringMVC获取请求和数据响应

1.SpringMVC数据响应

相应方式:

  • 直接返回字符串
  • 通过SpringMVC提供的ModelAndView对象返回

回写数据

  • 直接返回字符串
  • 返回数据对象或集合

页面跳转
1.1 通过字符串返回直接跳转(视图解析器含有方法可省略前后缀,需在spring-mvc.xml文件配置bean)
SpringMVC获取请求和数据响应_第1张图片
代码实现

<bean id="resolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/jsp/"></property>
        <property name="suffix" value=".jsp"></property>
    </bean>

实现类代码
 @RequestMapping("/quick1")
    public String save1(){
        System.out.println("running");
        return "success";
    }

1.2使用ModelAndView返回对象,并且存储数据

 @RequestMapping("/quick2")
    public ModelAndView save2(ModelAndView modelAndView){
        System.out.println("running");
        //向request存储数据
        modelAndView.addObject("username","itheima");
        modelAndView.setViewName("success");
        return modelAndView;
    }

1.3通过request存储对象,并跳转页面

@RequestMapping("/quick0")
    public String save0(HttpServletRequest request){
        request.setAttribute("suername","zhangsan");
        return "success";
    }

1.4 通过response方法回写数据

public void save3(HttpServletResponse response) throws IOException {
        response.getWriter().write("success");
    }

1.5返回字符串
在异步项目中,客户端与服务器端往往要进行json格式字符串交互,所以配置json转换工具jackson,导入坐标。
代码实现

 @RequestMapping("/quick6")
    @ResponseBody
    public String save6() throws IOException{
        User user = new User();
        user.setUsername("zhangsan");
        user.setAge(22);
        //返回json数据
        ObjectMapper objectMapper = new ObjectMapper();
        String json = objectMapper.writeValueAsString(user);
        return json;
    }
<!--导入jackson-->
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-core</artifactId>
      <version>2.13.0</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.13.0</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-annotations</artifactId>
      <version>2.13.0</version>
    </dependency>

1.7返回对象或集合
因为需要通过SpringMVC帮助我们对对象或集合进行json字符串的转换并回写,因此需要在spring-mvc.xml中进行如下两种配置:

在 SpringMVC 的各个组件中,处理器映射器、处理器适配器、视图解析器称为 SpringMVC 的三大组件。使用mvc:annotation-driven自动加载 RequestMappingHandlerMapping(处理映射器)和
RequestMappingHandlerAdapter( 处 理 适 配 器 ),可用在Spring-xml.xml配置文件中使用
mvc:annotation-driven替代注解处理器和适配器的配置。同时使用mvc:annotation-driven默认底层就会集成jackson进行对象或集合的json格式字符串的转换。
下一种代码配置

<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
        <property name="messageConverters">
            <list>
                <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"></bean>
            </list>
        </property>
    </bean>

返回对象或集合(集合返回有两种方式)

@RequestMapping("/quick7")
    @ResponseBody
    public User save7()throws IOException{
        User user = new User();
        user.setUsername("zhangsan");
        user.setAge(22);
        return user;
    }

2.SpringMVC的数据响应

2.1获得请求参数
客户端请求参数的格式是:name=value&name=value… …
服务器端要获得请求的参数,有时还需要进行数据的封装,SpringMVC可以接收如下类型的参数:

  • 基本类型参数
  • POJO类型参数
  • 数组类型参数
  • 集合类型参数
    2.2获得基本类型和POJO类型public void quickMethod9(String username,int age) 在方法内直接声明参数名(必须一致),POJO也是如此
    SpringMVC获取请求和数据响应_第2张图片
    重点获取集合类型参数
    1表单信息
    SpringMVC获取请求和数据响应_第3张图片

获得集合参数时,要将集合参数包装到一个POJO中才可以。

package com.itheima.Vo;

import com.itheima.poji.User;

import java.util.List;

public class vo {
    private List<User> userList;

    public List<User> getUserList() {
        return userList;
    }

    public void setUserList(List<User> userList) {
        this.userList = userList;
    }

    @Override
    public String toString() {
        return "vo{" +
                "userList=" + userList +
                '}';
    }
}

代码实现

@RequestMapping("/quick10")
    @ResponseBody//Controller中的业务方法的POJO参数的属性名与请求参数对象内属性name一致,参数值会自动映射匹配
    public void save10(vo vo){
        System.out.println(vo);
    }

当使用ajax提交时,可以指定contentType为json形式,那么在方法参数位置使用@RequestBody可以直接接收集合数据而无需使用POJO进行包装。
SpringMVC获取请求和数据响应_第4张图片

@RequestMapping("/quick13")
@ResponseBody
public void quickMethod13(@RequestBody List<User> userList) throws IOException {
		System.out.println(userList);
}

注意,因为我们配置spring前端控制器DispatcherServlet的url-pattern配置的是/,代表对所有的资源都进行过滤操作,所以js文件扫描会出现问题
在这里插入图片描述
当post请求时,输入汉字数据会出现乱码,需要在web.xml文件配置过滤器也可以

<filter>
	<filter-name>CharacterEncodingFilter</filter-name>
	<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
		<init-param>
		<param-name>encoding</param-name>
		<param-value>UTF-8</param-value>
	</init-param>
</filter>
<filter-mapping>
	<filter-name>CharacterEncodingFilter</filter-name>
	<url-pattern>/</url-pattern>
</filter-mapping>

你可能感兴趣的:(java,java-ee,intellij-idea)