0
点赞
收藏
分享

微信扫一扫

接收参数及乱码处理

其生 2022-04-29 阅读 57

后台服务器程序我们这里是不区分发过来的是get请求还是post请求的,合二为一了。

@Controller
public class UserController {

    @RequestMapping("/save")   
    @ResponseBody 
    // 接收发过来的请求参数             
    public String save(String name,Integer age){
        // 处理请求
        System.out.println("普通参数传递 name ==> " + name);
        System.out.println("普通参数传递 age ==> " + age);
        return "{'info':'springmvc'}";
    }
}

注意:方法的形参名称要和客户端发送请求的请求参数名称相同,不相同则后台服务器接收不到参数。

发送中文数据后台这里乱码

使用Apifox模拟发送请求
在这里插入图片描述
后台接收会乱码(实际测试请求,发现只有post会乱码)
在这里插入图片描述
解决办法

public class SevletContainersInitConfig extends AbstractDispatcherServletInitializer {
// 在里面追加一个方法(重载自有的一个方法)

    // post请求参数乱码处理
    @Override
    protected Filter[] getServletFilters() {
        CharacterEncodingFilter filter = new CharacterEncodingFilter();
        filter.setEncoding("utf8");
        return new Filter[]{filter};
    }
}

为Web容器启动的时候添加字符过滤器,使之可以处理中文。

此外

关于接受参数,还有以下几种形式:

// 请求参数名可以和 这里的形参名不同,但此时需使用@RequestParam注解进行指定映射
@RequestMapping("/commonParamDifferentName")
@ResponseBody
public String commonParamDifferentName(@RequestParam("name")String username,int age)

此外,形参那里还可以用数组,POJO,集合等形式去接收参数,都有各自的不同应用场景

(User user)						// 请求参数名 和 形参对象属性名相同
(String[] likes)				// 请求参数为多个,且这几个请求参数的名称都为 likes
(@RequestParam List<String> likes)			
如果数据在 body里 , 就要用 @RequestBody

传递JSON数据

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

不导这个坐标就会报错:
org.springframework.web.HttpMediaTypeNotSupportedException:
Content type ‘application/json;charset=UTF-8’ not supported

@Configuration
@ComponentScan("controller")
@EnableWebMvc       // 开启 JSON数据转对象的功能
public class SpringMVCConfig {

}
// 发送 JSON数据: ["game","music","travel"]

	public String save(@RequestBody List<String> likes){
	    // 处理请求
	    System.out.println("user save ...");
	    System.out.println(likes);					// [game, music, travel]
	    return "{'info':'springmvc'}";
	}
/**
 * 如果发送的是这样的 JSON数据, 则要用 POJO 来接收
{
    "name":"南京是否会老师的",
    "age":15
}
 */

    public String save(@RequestBody User user){
        // 处理请求
        System.out.println("user save ...");
        System.out.println(user);				// User{name='南京是否会老师的', age=15}
        return "{'info':'springmvc'}";
    }
举报

相关推荐

0 条评论