欢迎光临
我们一直在努力

SpringMVC中@RequestBody注解如何用于处理String类型参数?

1、@RequestBody注解概述

SpringMVC中@RequestBody注解如何用于处理String类型参数?

定义与作用@RequestBody注解用于将HTTP请求体中的数据绑定到方法参数上,常用于处理JSON或XML格式的数据。

应用场景:适用于处理非默认的application/xwwwformurlencoded,如application/jsonapplication/xml

2、配置HttpMessageConverter

必要性:为了让SpringMVC能够正确处理@RequestBody注解的请求体数据,需要配置合适的HttpMessageConverter

配置示例:在Spring配置文件中添加MappingJackson2HttpMessageConverter,支持JSON格式的转换。

     <bean id="mappingJacksonHttpMessageConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
         <property name="supportedMediaTypes">
             <list>
                 <value>text/html;charset=UTF8</value>
                 <value>application/json;charset=UTF8</value>
             </list>
         </property>
     </bean>

3、服务接口示例

基本用法:通过@RequestBody注解,可以将请求体中的JSON字符串绑定到相应的Java对象上。

SpringMVC中@RequestBody注解如何用于处理String类型参数?

     @RestController
     public class ReqBodyController {
         @Data
         public static class Req {
             private String key;
             private Integer size;
         }

         @RequestMapping(value = "/body", method = RequestMethod.POST)
         public BaseRsp body(@RequestBody Req req) {
             return new BaseRsp<>(req);
         }
     }

4、前端调用示例

Ajax请求:使用$.ajax方法发送POST请求,指定contenttypeapplication/json,并传递JSON格式的数据。

     $.ajax({
         url: "/login",
         type: "POST",
         data: JSON.stringify({userName: "admin", pwd: "admin123"}),
         contentType: "application/json; charset=utf8",
         success: function(data) {
             alert("request success !");
         }
     });

控制器方法:在控制器中使用@RequestBody注解接收JSON数据并绑定到Java对象。

     @RequestMapping("/login")
     public void login(@RequestBody String userName, @RequestBody String pwd) {
         System.out.println(userName + ":" + pwd);
     }

5、注意事项

ContentType设置:必须显式指定请求头的ContentTypeapplication/json,否则会导致解析错误。

请求方法限制@RequestBody不支持GET方法,通常用于POST、PUT等带有请求体的HTTP方法。

数据格式要求:请求体中的数据必须是有效的JSON格式,且键名必须与Java对象的属性名一致。

SpringMVC中@RequestBody注解如何用于处理String类型参数?

相关问题与解答

问题1:如何在SpringMVC中使用@RequestBody注解接收单个String类型的参数?

答:可以通过重写MappingJackson2HttpMessageConverter类来处理单个String类型的参数,具体实现如下:

package com.test.converter.json;
import org.springframework.http.HttpInputMessage;
import org.springframework.http.converter.HttpMessageNotReadableException;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import java.io.IOException;
import java.lang.reflect.Type;
import java.util.LinkedHashMap;
public class CustomerMappingJackson2HttpMessageConverter extends MappingJackson2HttpMessageConverter {
    @Override
    protected Object readInternal(Class<?> clazz, HttpInputMessage inputMessage) throws IOException, HttpMessageNotReadableException {
        Class<?> deseriClazz = getClazz(clazz);
        Object param = super.readInternal(deseriClazz, inputMessage);
        return getTrueObject(clazz, param);
    }
}

然后在Spring配置文件中注册这个自定义的转换器:

<bean id="customMappingJacksonHttpMessageConverter" class="com.test.converter.json.CustomerMappingJackson2HttpMessageConverter"/>

问题2:为什么在使用@RequestBody注解时需要显式指定ContentType为application/json?

答:因为@RequestBody注解默认处理的是application/jsonapplication/xml等非默认的MIME类型,而浏览器默认使用的是application/xwwwformurlencoded编码方式,如果不显式指定ContentTypeapplication/json,SpringMVC无法正确解析请求体中的JSON数据,从而导致解析错误。

各位小伙伴们,我刚刚为大家分享了有关“springmvc @RequestBody String类型参数的使用”的知识,希望对你们有所帮助。如果您还有其他相关问题需要解决,欢迎随时提出哦!

赞(0)
版权声明:本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权
文章名称:《SpringMVC中@RequestBody注解如何用于处理String类型参数?》
文章链接:https://yuyunkj.com/article/10018.html
本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。

评论 抢沙发