SpringMVC---获得请求数据

请求参数格式:name=value&name=value…

  • 基本类型
    Controller业务方法的参数名称与请求参数name一致的话,参数值将会自动映射。
   @RequestMapping("/quick8")
   @ResponseBody
   public int save8(String username){
       System.out.println(username);
       Users users = new Users();
       users.setName(username);
       return userService.addUser(users);
   }

访问地址:localhost:8080/spring_mvc_Web_exploded/user/quick8?username=陈瓜瓜

  • POJO类型(普通JavaBean)
    POJO参数的属性名与请求参数的name一致,将会自动映射。
@Component("users")
public class Users {
   private int id;
   private String name;

   public int getId() {
       return id;
   }

   public void setId(int id) {
       this.id = id;
   }

   public String getName() {
       return name;
   }

   public void setName(String name) {
       this.name = name;
   }

   @Override
   public String toString() {
       return "Users{" +
               "id=" + id +
               ", name='" + name + '\'' +
               '}';
   }
}
	//Controller
    @RequestMapping("quick9")
    @ResponseBody
    public int save9(Users users){
        System.out.println(users.toString());
        return userService.addUser(users);
    }

访问地址:localhost:8080/spring_mvc_Web_exploded/user/quick8?name=陈瓜瓜&id=1

  • 数组类型
    与访问的参数名字一致,会自动映射。
    @RequestMapping("quick10")
    @ResponseBody
    public void save10(String[] names){
        System.out.println(Arrays.asList(names));
    }

访问地址:localhost:8080/spring_mvc_Web_exploded/user/quick8?names=陈瓜瓜&names=1

  • 集合类型
    需要将集合参数包装到一个POJO中才可以,使用表单提交,表单属性名要和封装的成员变量名完全一致,如下图。
    usersList
public class VO {
    private List<Users> usersList;

    public List<Users> getUsersList() {
        return usersList;
    }

    public void setUsersList(List<Users> usersList) {
        this.usersList = usersList;
    }

    @Override
    public String toString() {
        return "VO{" +
                "usersList=" + usersList +
                '}';
    }
}
    @RequestMapping("quick11")
    @ResponseBody
    public void save11(VO vo){
        System.out.println(vo);
    }

也可以指定contenType为json,在方法参数位置使用@RequestBody,可以直接接收数据。

    @RequestMapping("/quick12")
    @ResponseBody
    public void save12(@RequestBody List<Users> usersList){
        System.out.println(usersList);
    }

在这里插入图片描述

开放静态资源

都要放在< mvc:annotation-driven >下面

<!--前面是资源映射地址,后面是实际所在地址-->
<mvc:resources mapping="/js/**" location="/js/"/>

<!--或是直接交给原有容器处理,如tomcat-->
<mvc:default-servlet-handler/>

中文乱码

在web.xml里面设置过滤器

  <filter>
        <description>字符编码过滤器</description>
        <filter-name>encodingFilter</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>
        <init-param>
            <param-name>forceEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>encodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

@RequestParam

当前端和后台的方法中的参数名不一致时,需要显式绑定参数。

    @RequestMapping("quick13")
    @ResponseBody
    public void save13(@RequestParam("username") String name){
        System.out.println(name);
    }

访问地址:localhost:8080/spring_mvc_Web_exploded/user/quick13?username=张三

获得Restful风格参数

Restful风格的请求是使用“url+请求方式”,使用@PathVariable注解进行占位符匹配。

  • GET:用于获取资源
  • POST:用于新建资源
  • PUT:用于更新资源
  • DELETE:用于删除资源
    访问地址:localhost:8080/spring_mvc_Web_exploded/user/quick14/张三
    @RequestMapping(value = "/quick14/{name}",method = RequestMethod.GET)
    @ResponseBody
    public void save14(@PathVariable("name") String username){
        System.out.println(username);
    }

自定义类型转换器

例如:日子类型数据需要自定义类型转换器。

import org.springframework.core.convert.converter.Converter;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class DateConverter implements Converter<String, Date> {
    @Override
    public Date convert(String s) {
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
        Date date = null;
        try {
            date = simpleDateFormat.parse(s);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return date;
    }
}
<mvc:annotation-driven conversion-service="conversionService"/>

<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
    <property name="converters">
        <list>
            <bean class="com.littlepants.converter.DateConverter"/>
         </list>
    </property>
</bean>

文件上传

前端方法应为POST,数据格式为mutilpart/form-data
前端属性名应与后端形参名字一致,便于直接封装。

<!--Spring_mvc.xml-->
    <bean class="org.springframework.web.multipart.commons.CommonsMultipartResolver" id="multipartResolver">
        <property name="defaultEncoding" value="UTF-8"/>
        <property name="maxUploadSize" value="500000"/>
    </bean>
    @RequestMapping(value = "quick16",method = RequestMethod.POST)
    @ResponseBody
    public void save16(String name, MultipartFile upload,HttpServletRequest request) throws IOException {
        System.out.println(name);
        System.out.println(upload);
        String path =request.getSession().getServletContext().getRealPath("upload/");
        System.out.println(path);
        //获得上传文件名称
        String originalFilename = upload.getOriginalFilename();
        upload.transferTo(new File(path+originalFilename));
    }

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值