1. 获取表单提交参数或地址栏参数
String name = request.getParameter("name");
2. 获取JSON提交参数
注意:json被springmvc读取过,是获取不到的
BufferedReader reader = new BufferedReader(new InputStreamReader(request.getInputStream()));
String json = reader.readLine();
reader.close();
User user = new ObjectMapper().readValue(json, User.class);
3.获取放在请求头中的参数
String name = request.getHeader("name");
4.自定义参数解析器
自定义参数解析器
import com.demo.anno.Custom;
import org.springframework.core.MethodParameter;
import org.springframework.web.bind.support.WebDataBinderFactory;
import org.springframework.web.context.request.NativeWebRequest;
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
import org.springframework.web.method.support.ModelAndViewContainer;
import javax.servlet.http.HttpServletRequest;
import java.util.Arrays;
import java.util.List;
/**
* 自定义参数解析器
*/
public class CustomHandlerMethodArgumentResolver implements HandlerMethodArgumentResolver {
/**
* 是否启用这个参数解析器,如果启用就执行resolveArgument方法
*
* @param parameter 方法参数
* @return 是否启用这个参数解析器,返回 true 表示启用,返回 false 表示不启用。
*/
@Override
public boolean supportsParameter(MethodParameter parameter) {
// 如果方法参数上带又@Custom注解,就执行这个参数解析器
return parameter.getParameterType().isAssignableFrom(List.class)&¶meter.hasParameterAnnotation(Custom.class);
}
@Override
public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception {
HttpServletRequest request = webRequest.getNativeRequest(HttpServletRequest.class);
// 编写转换逻辑
String names = request.getParameter("names");
String[] split = names.split(":");
Object result = Arrays.asList(split);
return result;
}
}
自定义一个注解
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.PARAMETER)
public @interface Custom {
}
向Spring MVC注册参数解析器
import org.springframework.context.annotation.Configuration;
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import java.util.List;
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addArgumentResolvers(List<HandlerMethodArgumentResolver> resolvers) {
resolvers.add(new CustomHandlerMethodArgumentResolver());
}
}
编写测试接口
import com.demo.anno.Custom;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
@RequestMapping
public class HelloController {
@GetMapping("/hello")
public String hello(@Custom List<String> nameList) {
return "hello "+ nameList.toString();
}
}