springMVC接收参数



一、springmvc接收前台json参数

需要用@RequestBody来处理json数据,有以下几种方式,因为JSON被转成了LinkedHashMap只能用Map或者对

象接收

1、创建有关对象来作为接收容器

2、直接用map作为接收容器

3、创建对象并(@ModelAttribute("user") User user)

4、自定义注解

实现方式:

@JsonArg("$.resource") String code

步骤:

1、自定义注解

@Retention(RetentionPolicy.RUNTIME)

@Target(ElementType.PARAMETER)

public @interface JsonArg {

    public String value() default "";

}

2、实现 HandlerMethodArgumentResolver :

public class JsonArgumentResolver implements HandlerMethodArgumentResolver{

    private static final String JSONBODYATTRIBUTE = "JSON_REQUEST_BODY";

@Override

    public boolean supportsParameter(MethodParameter parameter) {

return parameter.hasParameterAnnotation(JsonArg.class);

    }

@Override

    public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer,

NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception {

String body = getRequestBody(webRequest);

String arg = parameter.getParameterAnnotation(JsonArg.class).value();

if (StringUtils.isEmpty(arg)) {

arg = parameter.getParameterName();

        }

Object val = JsonPath.parse(body).read(arg, parameter.getParameterType());

return val;

    }
    private String getRequestBody(NativeWebRequest webRequest){

HttpServletRequest servletRequest = webRequest.getNativeRequest(HttpServletRequest.class);

String jsonBody = (String) webRequest.getAttribute(JSONBODYATTRIBUTE,

NativeWebRequest.SCOPE_REQUEST);

if (jsonBody==null){

try {

jsonBody = IOUtils.toString(servletRequest.getInputStream());

webRequest.setAttribute(JSONBODYATTRIBUTE, jsonBody, NativeWebRequest.SCOPE_REQUEST);

} catch (IOException e) {

throw new RuntimeException(e);

            }
        }

return jsonBody;

    }

}

3、spring-mvc中声明:

<mvc:annotation-driven>
    <mvc:argument-resolvers>
        <beans:bean class="com.redcollar.bl.commons.extension.JsonArgumentResolver" />
    </mvc:argument-resolvers>
</mvc:annotation-driven>

二、接收非json数据

可以有多种方式

1、(@RequestParam(value=“aa”, required=true) String inputStr)