【SpringMVC——请求与响应】

请求映射路径:

问题:多人开发,每人设置不同的请求路径,冲突问题如何解决?(为解决@RequestMapping访问路径冲突问题)

  • 设置模块名作为请求路径前缀

@Controller
public class BookController {
    @RequestMapping("/book/save")
    @ResponseBody
    public String save(){
        return "{'module':'book save'}";
    }
}

================================================

@Controller
public class UserController {
    @RequestMapping("/user/save")
    @ResponseBody
    public String save(){
        return "{'module':'user save'}";
    }
}
  •  上述代码虽能解决冲突问题,但较为麻烦;因此,对上述代码加以优化(以BookController为例)

 @RequestMapping可以设置在方法上,也可以设置在类上,类和方法上同时设置代表当前访问路径为:/book/save

@Controller
@RequestMapping("/book")
public class BookController {
    @RequestMapping("/save")
    @ResponseBody
    public String save(){
        return "{'module':'book save'}";
    }
}

Post请求中文乱码处理:

  • 为Web容器添加过滤器并指定字符集,Spring-web包中提供了专用的字符过滤器

public class ServletContainersInitConfig extends AbstractAnnotationConfigDispatcherServletInitializer {

    ...

    // 配置字符编码过滤器
    protected Filter[] getServletFilters(){
        CharacterEncodingFilter filter = new CharacterEncodingFilter();
        filter.setEncoding("utf-8");
        return new Filter[]{filter};
    }
}

 请求参数:

  • 普通参数:url地址传参,地址参数名与形参变量名相同,定义形参即可接收参数

@RequestMapping("/commonParam")
@ResponseBody
public String commonParam(String name ,int age){
    System.out.println(name);
    System.out.println(age);
    return "{'module':'common param'}";
}
  • 普通参数:请求参数名与形参变量名不同,使用@RequestParam绑定参数关系

@RequestMapping("/commonParamDifferentName")
@ResponseBody
public String commonParamDifferentName(@RequestParam("name")String username ,int age){
    System.out.println(name);
    System.out.println(age);
    return "{'module':'common param different name'}";
}
  • POJO参数:请求参数名与形参对应属性名相同,定义POJO类型形参即可接收参数

@RequestMapping("/pojoParam")
@ResponseBody
public String pojoParam(User user){
    return "{'module':'pojo param'}";
}
  • 数组参数:请求参数名与形参对象属性名相同且请求参数为多个,定义数组类型形参即可接收参数

@RequestMapping("/arrayParam")
@ResponseBody
public String arrayParam(String[] likes){
    return "{'module':'array param'}";
}
  • 集合保存普通参数:请求参数名与形参集合对象名相同且请求参数为多个,@RequestParam绑定参数关系

@RequestMapping("/listParam")
@ResponseBody
public String listParam(@RequestParam List<String> likes){
    return "{'module':'list param'}";
}
  • JSON数据:

步骤一:添加json数据转换相关坐标

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.9.0</version>
</dependency>

步骤二:设置发送json数据(使用PostMan(邮差)工具,请求body中添加json数据)

步骤三:开启自动转换json数据的支持(@EnableWebMvc注解功能强大,该注解整合了多个功能,此处仅使用其中一部分功能——json数据进行自动类型转换)

@Configuration
@ComponentScan("com.it.controller")
@EnableWebMvc
public class SpringMvcConfig {
}

步骤四:设置接收json数据——形参注解@RequestBody

@RequestMapping("/listParamForJson")
@ReponseBody
public String listParamForJson(@RequestBody List<String> likes){
    return "{'module':'list common for json param'}";
}
  • 日期类型参数传递

日期类型数据基于系统不同,格式也不同(2022-11-21  2022/11/21  11/21/2022...)

接收形参时,根据不同的日期格式设置不同的接收方式——@DateTimeFormat(其转换工作靠类型转换器-Converter接口来完成的)

@RequestMapping("/dataParam")
@ResponseBody
public String dataParam(Date date, 
                        @DateTimeFormat(pattern = "yyyy-MM-dd") Date date1,
                        @DateTimeFormat(pattern = "yyyy/MM/dd HH:mm:ss") Date date2){
    return "{'module':'data param'}";
}

响应JSON数据——@ReponseBody(其转换工作靠HttpMessageConverter接口):

  • 响应页面跳转页面

@RequestMapping("/toJumpPage")
public String toJumpPage(){
    return "page.jsp"
}
  • 响应文本数据(上述请求参数代码中,return返回的均为字符串,并非是json数据)

@RequestMapping("/toText")
@ReponseBody
public String toText(){
    return "reponse.txt";
}
  • 响应POJO对象

@RequestMapping("/toJsonPOJO")
@ReponseBody
public User toJsonPOJO(){
    User user = new User();
    user.setName("tom");
    return user;
}
  • 响应POJO集合对象

@RequestMapping("/toJsonList")
@ReponseBody
public List<User> toJsonList(){
    User user1 = new User();
    user1.setName("tom");

    User user2 = new User();
    user2.setName("jerry");

    return userList;
}

REST风格:是一种约定方式,而不是规范(意味着可以打破)

 REST(Representational State Transfer)表现形式状态转换(访问网络资源的格式)

  • 传统风格资源描述形式:

        http://localhost/user/getById?id=1

        http://localhost/user/saveUser

  • REST风格描述形式:

        http://localhost/user/1

        http://localhost/user

  • 优点:

        隐藏资源的访问行为,无法通过地址得知对资源是何种操作

        书写简化

范例:

/**
save方法:无参
仅限于POST提交,其他提交方式报错
若想修改为其他提交方式,则需修改method值,如:method = RequestMethod.GET
*/
@RequestMapping(value="/users",method = RequestMethod.POST)
@ResponseBody
public String save(){
    return "{'module':'user save'}";
}
===============================================================
/**
getById方法:带参
使用注解 @PathVariable 并且路径参数value中使用{形参名}进行占位
*/
@RequestMapping(value="/users/{id1}",method = RequestMethod.GET)
@ResponseBody
public String getById(@PathVariable Integer id1){
    return "{'module':'user getById'}";
}

@RequestParam、@RequestBody、@PathVariable

  • @RequestParam:用于接收url地址传参或表单传参
  • @RequestBody:用于接收json数据
  • @PathVariable:用于接收路径参数,使用{参数名称}描述路径参数

简化开发 

@RestController :等同于 @Controller与@ResponseBody两个注解组合功能 

@RestController
public class BookController {
}

 @GetMapping("/{id1}"):等同于@RequestMapping(value="/users/{id1}",method = RequestMethod.GET)

同理 @PostMapping等同于@RequestMapping(value="/users/{id1}",method = RequestMethod.POST)

@GetMapping("/{id}")
public String getById(@PathVariable Integer id){
    return "{'module':'book getById}";
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SpringMVC是一个用于构建Web应用程序的Java框架。在SpringMVC中,处理请求响应是通过使用控制器方法来实现的。控制器方法使用@RequestMapping注解来映射请求的URL,并通过方法参数来获取请求参数和响应对象。 在处理请求时,可以使用@RequestParam注解来获取请求参数的值。例如,可以在方法参数上使用@RequestParam注解来获取请求中的特定参数值。另外,也可以使用@PathVariable注解来获取URL中的路径参数。 在处理响应时,可以使用@ResponseBody注解将方法的返回值直接写入HTTP响应体中,而不是进行视图跳转。这样可以直接返回字符串、JSON格式的数据或其他类型的数据。 另外,在SpringMVC中,还有一些核心组件,如处理器映射器、处理器适配器和视图解析器。处理器映射器负责将请求映射到相应的控制器方法,处理器适配器负责将请求参数绑定到方法参数,并调用相应的控制器方法,视图解析器负责将方法的返回值解析为视图。 总结起来,SpringMVC通过控制器方法、注解和核心组件来处理请求响应,使得开发者可以方便地构建Web应用程序。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* *3* [springMVC请求响应](https://blog.csdn.net/weixin_38088097/article/details/105840310)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [SpringMVC请求响应](https://blog.csdn.net/weixin_51146329/article/details/123166475)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值