springboot接收时间类型参数的方式

1.参数直接跟在url上面用@DateTimeFormat接收

在这里插入图片描述

2.参数写在实体类中 用@JsonFormat接收

在这里插入图片描述
注意: pattern 中的表达式要和接受的数据类型格式一致。不然会报错。例如表达式是 yyyy-MM-dd 就只能匹配LocalDate ,不能用 LocalDateTime去接收。即使LocalDateTime是更细化的时间类型。

3.在springMVC层加入类型转换器(一劳永逸)

第一步:在WebMvcConfiguration中添加如下方法

/**
 * 配置类,注册web层相关组件
 */
@Configuration
@Slf4j
public class WebMvcConfiguration extends WebMvcConfigurationSupport {
    /**
     * 扩展Spring MVC框架的消息转化器
     * @param converters
     */
    protected void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
        log.info("扩展消息转换器...");
        //创建一个消息转换器对象
        MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
        //需要为消息转换器设置一个对象转换器,对象转换器可以将Java对象序列化为json数据
        converter.setObjectMapper(new JacksonObjectMapper());
        //将自己的消息转化器加入容器中
        converters.add(0,converter);
    }
}

第二步:定义转换器

/**
 * 对象映射器:基于jackson将Java对象转为json,或者将json转为Java对象
 * 将JSON解析为Java对象的过程称为 [从JSON反序列化Java对象]
 * 从Java对象生成JSON的过程称为 [序列化Java对象到JSON]
 */
public class JacksonObjectMapper extends ObjectMapper {

    public static final String DEFAULT_DATE_FORMAT = "yyyy-MM-dd";
    //public static final String DEFAULT_DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss";
    public static final String DEFAULT_DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm";
    public static final String DEFAULT_TIME_FORMAT = "HH:mm:ss";

    public JacksonObjectMapper() {
        super();
        //收到未知属性时不报异常
        this.configure(FAIL_ON_UNKNOWN_PROPERTIES, false);

        //反序列化时,属性不存在的兼容处理
        this.getDeserializationConfig().withoutFeatures(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);

        SimpleModule simpleModule = new SimpleModule()
                .addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_FORMAT)))
                .addDeserializer(LocalDate.class, new LocalDateDeserializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_FORMAT)))
                .addDeserializer(LocalTime.class, new LocalTimeDeserializer(DateTimeFormatter.ofPattern(DEFAULT_TIME_FORMAT)))
                .addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_FORMAT)))
                .addSerializer(LocalDate.class, new LocalDateSerializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_FORMAT)))
                .addSerializer(LocalTime.class, new LocalTimeSerializer(DateTimeFormatter.ofPattern(DEFAULT_TIME_FORMAT)));

        //注册功能模块 例如,可以添加自定义序列化器和反序列化器
        this.registerModule(simpleModule);
    }
}
<think>嗯,用户想知道在Spring Boot中如何接收多个请求参数,还想要示例。首先,我得回忆一下Spring Boot处理请求参数的几种常见方式。通常,处理HTTP请求参数可以通过@RequestParam、@PathVariable、或者封装成对象。可能还有表单提交或者JSON数据的情况,但用户的问题比较基础,应该是指普通的GET或POST请求参数。 首先,@RequestParam注解是最直接的,用来获取查询参数或者表单参数。例如,一个GET请求的URL可能是这样的:/user?id=123&name=John,这时候在Controller的方法参数里用@RequestParam来分别获取id和name。不过,如果有多个参数的话,可能需要多个@RequestParam,这样参数多了可能不太方便。这时候可以改用对象封装,比如创建一个DTO类,用@ModelAttribute来自动绑定参数到对象的属性上。 然后是@PathVariable,用于从URL路径中获取参数。比如/user/{id}/name/{name},这时候用@PathVariable来获取id和name的值。这种方法适合RESTful风格的API设计。 另外,POST请求中如果Content-Type是application/x-www-form-urlencoded,同样可以用@RequestParam来获取参数。而如果是JSON数据的话,就需要用@RequestBody来映射到对象,但用户的问题可能不涉及这种情况,不过还是应该提一下,以防用户有其他需求。 用户需要示例,所以得准备几个代码例子。比如,一个使用多个@RequestParam的例子,一个用对象封装的例子,还有@PathVariable的例子。可能还需要说明如何处理POST表单提交的情况。 然后,要检查引用的资料是否有相关的内容。根据提供的引用,引用[2]提到Spring Boot接收xml参数,用自动转换,可能涉及到@RequestBody,但用户的问题是关于多个参数,可能不直接相关。不过,可以提到当参数较多时,推荐使用对象封装的方式,类似于引用[2]中的自动转换,但这里可能是表单数据而不是XML。 还需要注意,是否需要处理参数的可选性。比如,@RequestParam的required属性,默认是true,可以设置为false允许参数缺失。这点在示例中应该说明,避免用户遇到参数缺失时的错误。 另外,参数名和Java变量名的映射问题。如果前端传递的参数名和后端的变量名一致,Spring Boot会自动绑定,否则需要用@RequestParam指定名称。例如,如果参数是user_name,而变量是userName,就需要@RequestParam("user_name")。 可能还需要提到参数的类型转换,Spring Boot会自动将字符串参数转换为方法参数的类型,比如将字符串转换为整数、日期等,但如果转换失败会抛出异常,这时候需要异常处理。 总结一下,回答的结构应该是先介绍几种方法,然后分别给出示例代码,最后可能总结不同场景下的选择建议。同时,引用相关的参考资料,比如引用[2]提到的自动转换,可以类比到对象绑定上。</think>在Spring Boot接收多个请求参数可以通过以下几种方式实现,具体方法及示例说明如下: --- ### 一、使用 `@RequestParam` 注解(适用于GET/POST请求) 通过`@RequestParam`直接绑定单个参数: ```java @RestController public class UserController { @GetMapping("/user") public String getUser( @RequestParam("id") Long id, @RequestParam("name") String name) { return "ID: " + id + ", Name: " + name; } } ``` 请求示例:`/user?id=123&name=John` *说明:参数默认必填,若允许缺失需设置`required=false`*[^2]。 --- ### 二、通过对象自动绑定(适用于参数较多时) 定义一个DTO类,使用`@ModelAttribute`自动映射: ```java public class UserRequest { private Long id; private String name; // 必须提供Getter/Setter } @PostMapping("/user") public String createUser(@ModelAttribute UserRequest user) { return "Created user: " + user.getName(); } ``` 请求示例(POST表单):`id=123&name=John` --- ### 三、使用 `@PathVariable` 接收路径参数 适用于RESTful风格的URL: ```java @GetMapping("/user/{id}/role/{role}") public String getUserRole( @PathVariable Long id, @PathVariable String role) { return "User " + id + " has role: " + role; } ``` 请求示例:`/user/456/role/admin` --- ### 四、处理JSON请求体(适用于POST/PUT) 使用`@RequestBody`接收JSON对象: ```java @PostMapping("/user") public String addUser(@RequestBody UserRequest user) { return "Added user: " + user.getName(); } ``` 请求示例(JSON Body): ```json {"id": 789, "name": "Alice"} ``` --- ### 总结选择建议 | 场景 | 推荐方式 | |--------------------|-------------------| | 少量简单参数 | `@RequestParam` | | 参数多且有复用需求 | 对象绑定(DTO) | | RESTful路径参数 | `@PathVariable` | | 复杂JSON数据 | `@RequestBody` |
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值