@RequestBody配合@JsonFormat注解实现字符串自动转换成Date

博客指出在controller里,@RequestBody能自动转换字符串与int类型,但无法处理Date类型。以Query对象为例,若其有Date类型字段,用@RequestBody映射前台传来的json成Query对象时,需加入@JsonFormat注解才能实现Date类型自动转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在controller中使用@RequestBody可以自动将字符串转换成int或者将int转换成字符串,但是Date类型则不行

比如:

    @PostMapping("/clockRecords")
    public String clockRecordsPost(@RequestBody Query query){
        return query.getDate()+"";
    }

Query对象中有Date类型的字段,@RequestBody会帮我们把前台传来的json映射成Query对象,为了能够自动转换Date我们需要加入@JsonFormat注解:

import com.fasterxml.jackson.annotation.JsonFormat;

import java.util.Date;

public class Query {
    private Integer page;
    private Integer limit;
 
    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
    private Date startTime;
    .............
}

 

### 使用 `@RequestBody` 将字符串参数转换为日期类型 为了实现通过 `@RequestBody` 注解接收的字符串参数并将其转换成日期类型的处理,在 Spring Boot 中可以利用多种方式来完成这一目标。一种常见的方式是在控制器中使用 `@InitBinder` 方法注册自定义格式化程序,从而能够解析特定格式的日期字符串。 对于具体的应用场景,假设前端发送的是 JSON 数据结构中的时间戳字段作为字符串形式传入到后端服务,则可以在对应的实体类属性上标注相应的注解以便于自动装配以及验证。此外,还需要确保配置了合适的 HTTP 请求头以表明内容类型为 `application/json`。 下面是一个具体的例子展示如何在 Spring Boot 应用程序里设置此功能: #### 控制器代码片段 ```java import org.springframework.web.bind.WebDataBinder; import org.springframework.web.bind.annotation.InitBinder; import org.springframework.format.datetime.DateFormatter; // ... other imports and class definition ... @RequestMapping(value = "/example", method = RequestMethod.POST) public ResponseEntity<?> handleRequest(@RequestBody MyDto myDto){ // Process the received DTO object which contains a Date field. } @InitBinder protected void initBinder(WebDataBinder binder) { binder.addCustomFormatter(new DateFormatter("yyyy-MM-dd HH:mm:ss")); } ``` 在此基础上,如果希望进一步增强灵活性或支持更多样化的输入格式,还可以考虑创建更复杂的自定义编辑器或者直接继承现有的 `PropertyEditorSupport` 类来自定义逻辑[^2]。 当涉及到更为复杂的数据绑定需求时,比如需要对接口传递过来的整个对象实例而非单一基本数据类型进行反序列化操作的话,那么可以通过扩展默认的消息转换机制——即引入 Jackson 或 Gson 这样的库来进行更加精细控制[^3]。 需要注意的一点是,上述示例仅适用于简单的 GET/POST 请求携带单个日期参数的情况;而对于 POST 请求体内的嵌套对象成员变量赋值等问题,则可能需要用到额外的技术手段加以解决。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值