首页 > 其他分享 >SpringMVC - RestFul

SpringMVC - RestFul

时间:2022-11-21 13:33:48浏览次数:50  
标签:return 请求 SpringMVC public user RestFul id String

一、RestFul 是一个请求路径的风格,将请求参数放在url中以/来分割请求参数。

url : /delete/1        1就是参数


RestFul的请求方式对应的是不同的操作

get  :  查询

post :    插入

delete : 删除

put   :   修改


二、RestFul案例

创建模型(User实体类,UserDao)

// 实体类
public class User {

private Integer id;
private String username;
private String password;


public Integer getId() {
return id;
}

public User() {
}

@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", password='" + password + '\'' +
'}';
}

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

public String getUsername() {
return username;
}

public void setUsername(String username) {
this.username = username;
}

public String getPassword() {
return password;
}

public void setPassword(String password) {
this.password = password;
}

public User(Integer id, String username, String password) {
this.id = id;
this.username = username;
this.password = password;
}
}

// UserDao
@Repository
public class UserDao {

private static LinkedHashMap<Integer, User> map = new LinkedHashMap<>();

static {
map.put(1001,new User(1001,"test01","test01"));
map.put(1002,new User(1002,"test02","test02"));
map.put(1003,new User(1003,"test03","test03"));
}


public void addUser(User user) {
map.put(user.getId(),user);
}

public Collection<User> getAllUser() {
return map.values();
}

public void deleteUserById(Integer id) {
if (map.get(id) != null) {
map.remove(id);
}
System.out.println("没有id为" + id + "的用户");
}
}

查询操作

@Controller
public class RestFulController{

@RequestMapping(value = "/user", method = RequestMethod.GET)
public String getAllUser(HttpServletRequest request) {

// 查询用户
Collection users = dao.getAllUser();

// 将结果存放到作用域中
request.setAttribute("users",users);

// 返回到页面
return "index";
}

}

添加操作

@RequestMapping(value = "/user", method = RequestMethod.POST)
public String getAllUser(User user, HttpServletRequest request) {
dao.addUser(user);
// 重定向
return "redirect:/user";
}

三、请求转发 和 重定向

有前缀的情况

前缀为 forward:  +  请求地址,转发到地址。视图类为 InternalResourceView,如果没有配置其他视图解析器默认也是这个

前缀为 redirect:  +  请求地址,重定向到地址。视图类为RedirectView


没有前缀的情况

视图解析器的前缀 + 返回的视图名 + 后缀 ,然后以转发的形式访问。

四、开启delete 、put请求

form表单只能发送get,post请求,如果要发送delete,put请求需要配置HiddenMethodFilter过滤器来开启。

     <filter>
<filter-name>hiddenHttpMethodFilter</filter-name>
<filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>hiddenHttpMethodFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

想要发送delete、put请求,必须要有_method请求参数,value的值为请求方式

<form th:action="@{/user/1}" method="post">
<input type="hidden" name="_method" value="delete"
</form>

a标签发送delete、put请求


// html代码
<a th:href="@{/user/1}" id="delete">发送delete请求</a>
<a th:href="@{/user}" id="put">发送put请求</a>

<form method="post" id="requestMethod">
<input type="hidden" name="_method" id="method" /input>
</form>

如果要使用jquery要在springmvc配置文件中开启默认servlet处理器

 <mvc:default-servlet-handler></mvc:default-servlet-handler>
// jquery代码
$(function() {

$("#delete").click(function() {
$("#method").attr("value","delete");
$("#request").attr("action",this.href).submit();
return false;
})

$("#put").click(function() {
$("#method").attr("value","put");
$("#request").attr("action",this.href).submit();
return false;
})

})

使用配置文件来设置请求控制器

<mvc:view-controoler path="/" viewname="index"> </mvc:view-controller>

如果使用了配置文件来设置控制器,那用注解来设置的控制器失效。需要开启mvc注解

 <mvc:annotation-driven></mvc:annotation-driven>

删除操作

@RequestMapping(value="/user/{id}", method = RequestMethod.DELETE)
public String deleteUserById(@PathVariable("id") Integer id) {
dao.deleteUserById(id);
return "redirect:/user";
}

SpringMVC 支持的路径风格

1.ant风格

1.?    表示任意一个单个字符

2.*    表示任意多个字符,可以是零个 

3.**   表示多层目录,可以是零层目录

2.rest风格

将请求参数放到请求地址中,参数以/来分割。这样的请求地址被叫做rest风格的路径方式

获取rest风格请求参数

// 使用  @PathVariable 来获取rest风格 的请求参数

// /user/{id} {} 占位符
@RequestMapping(value="/user/{id}", method = RequestMethod.DELETE)
public String deleteUserById(@PathVariable("id") Integer id) {
dao.deleteUserById(id);
return "redirect:/user";
}

修改操作

@RequestMapping(value="/user", method = RequestMethod.PUT)
public String deleteUserById(User user) {
dao.addUser(user);
return "redirect:/user";
}

五、解决乱码问题

如果请求为中文时,服务器获取的请求参数会发生乱码为了解决乱码问题。配置CharacterEncodingFilter

<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>
<!-- 设置响应编码 --!>
<init-param>
<param-name>forceResponseEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

标签:return,请求,SpringMVC,public,user,RestFul,id,String
From: https://blog.51cto.com/u_15497049/5873675

相关文章

  • SpringMVC - 获取请求参数,作用域
    一、获取请求参数1.原生serveltAPI@ControllerpublicclassTestController{@RequestMapping("/test01")publicStringtest01(HttpServletRequestrequest){......
  • SpringMVC - 初识Springmvc
    一、SpringMVC案例在springmvc配置文件中配置扫描器<!--base-package:表示扫描路径--!><context:component-scanbase-package="com.xin"></context:component-scan>创......
  • SpringMVC - 环境搭建
    一、MVC介绍M(model): 数据层。有两种数据,第一种java实体类,第二种daoV(view):视图层。HTML,jsp页面等。C(Controller):控制层。二、SpringMVC的环境搭建1.创建maven......
  • springmvc九yxf学RequestParam
    源码可以看出RequestParam是用在参数上的,再看,这个注解的源码比较少。required,这是设置是否必须有这个参数。defaultValue,是可以省略的意思,就是这个参数......
  • 第4章SpringMVC核心技术-一个或者多个拦截器拦截器,
    第4章SpringMVC核心技术.拦截器拦截器SpringMVC中的Interceptor拦截器是非常重要和相当有用的,它的主要作用是拦截指定Java框架SpringMVC5的用户请求,并进行相应的预......
  • 第4章SpringMVC核心技术2异常处理
    第4章SpringMVC核心技术2异常处理SpringMVC框架处理异常的常用方式:使用@ExceptionHandler注解处理异常。项目结构如下:2.1@ExceptionHandler注解使用注解@Exce......
  • SpringMVC-拦截器
    一、拦截器SpringMVC提供了拦截器在处理请求之前,之后,渲染视图后执行逻辑处理。接口是HandlerInterceptor。preHandle方法在处理请求之前执行,postHandle方法是在处理请求后......
  • 第4章SpringMVC核心技术-请求转发和重定向
    第4章SpringMVC核心技术-请求转发和重定向1请求重定向和转发概念当处理器对请求处理完毕后,向其它资源进行跳转时,有两种跳转方式:请求转发与重定向。而根据所要跳转......
  • SpringMVC-处理异常
    DispatcherServlet.doDispatchprotectedvoiddoDispatch(HttpServletRequestrequest,HttpServletResponseresponse)throwsException{ HttpServletRequestprocess......
  • SpringMVC-处理404
    一、解析mvc:default-servlet-handler/mvc.xml中<mvc:default-servlet-handler/>由DefaultServletHandlerBeanDefinitionParser负责解析。DefaultServletHandlerBeanDefi......