Spring POST请求添加Item报405错误及LocalDate序列化问题咨询
问题:Post请求添加Item时LocalDate序列化/反序列化问题
我正在用Postman学习通过POST请求向购物车添加新Item并写入数据库。
Item实体类代码
public class Item { private int id; private String name; private String description; private LocalDate expired; // 配有getter和setter方法 }
Spring后端处理方法
@PostMapping public void add(@RequestBody Item newItem) { itemSer.addNewItem(newItem); }
我在Postman中选择raw->json格式发送请求,请求体用了某GET请求返回的JSON:
{ "id": 2, "name": "postman", "description": "postman", "expired": { "year": 1700, "month": "NOVEMBER", "monthValue": 11, "dayOfMonth": 21, "leapYear": false, "dayOfWeek": "WEDNESDAY", "dayOfYear": 325, "era": "CE", "chronology": { "id": "ISO", "calendarType": "iso8601", "isoBased": true } } }
但Postman返回了405错误,使用的是Tomcat 9,排查后发现问题仅出在LocalDate字段上,需要将其格式化为Java能识别的POST请求格式。
找到的解决方案
- 添加Maven依赖
<dependency> <groupId>com.fasterxml.jackson.datatype</groupId> <artifactId>jackson-datatype-jsr310</artifactId> <version>${jackson.version}</version> </dependency>
- Spring配置类中配置ObjectMapper
@Bean public ObjectMapper createObjectMapper() { ObjectMapper mapper = new ObjectMapper(); mapper.registerModule(new JavaTimeModule()); mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); return mapper; }
- Item类的LocalDate字段添加注解
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd") private LocalDate expired;
- 修改后的POST请求体
{ "id": 2, "name": "postman", "description": "postman", "expired": "2030-01-02" }
我大致理解该方案的作用,但想了解其原理,以及在哪里可以找到更多相关资料?
内容的提问来源于stack exchange,提问作者Testaastopp
相关产品推荐
相关产品推荐

