Can not construct instance of java util LinkedHashMap no St

分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.youkuaiyun.com/jiangjunshow

                       

出现这个问题是由于
参数传入的是一个String类型 无法转换为Map

$.ajax({              type:'POST',              url:hostUrl,              dataType:'json',              contentType:'application/json',              async:false,      // 重点在这里              data:JSON.stringify(‘{"parentId":"0"}’),              success: function(json) {                  if(json.success){              },            error: function(XMLHttpRequest, textStatus, errorThrown) {             }          });
  
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

前台发送请求的时候 由于传来的

  data:JSON.stringify(‘{"parentId":"0"}’), 前后加了一个‘’导致这个不是一个合法的json对象,而是一个string了  解决办法    data:JSON.stringify({"parentId":"0"}),
  
  
  • 1
  • 2
  • 3
org.springframework.http.converter.HttpMessageNotReadableException: Could not read document: Can not construct instance of java.util.LinkedHashMap: no String-argument constructor/factory method to deserialize from String value ('{"parentId":"0","delflag":"0","sidx":"sort"}'at [Source: java.io.PushbackInputStream@5231d0e2; line: 1, column: 1]; nested exception is com.fasterxml.jackson.databind.JsonMappingException: Can not construct instance of java.util.LinkedHashMap: no String-argument constructor/factory method to deserialize from String value ('{"parentId":"0","delflag":"0","sidx":"sort"}'at [Source: java.io.PushbackInputStream@5231d0e2; line: 1, column: 1]    at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:228)    at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.read(AbstractJackson2HttpMessageConverter.java:213)    at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodArgumentResolver.readWithMessageConverters(AbstractMessageConverterMethodArgumentResolver.java:197)    at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.readWithMessageConverters(RequestResponseBodyMethodProcessor.java:149)    at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.resolveArgument(RequestResponseBodyMethodProcessor.java:127)    at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:121)    at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:161)    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:128)    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:114)    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:827)    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:738)    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:963)    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:897)    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)    at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:872)    at javax.servlet.http.HttpServlet.service(HttpServlet.java:648)    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)    at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:230)    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192)    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)    at org.springframework.boot.web.filter.ApplicationContextHeaderFilter.doFilterInternal(ApplicationContextHeaderFilter.java:55)    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192)    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)    at com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:123)    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192)    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)    at org.springframework.boot.actuate.trace.WebRequestTraceFilter.doFilterInternal(WebRequestTraceFilter.java:105)    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192)    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)    at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:208)    at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:177)    at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346)    at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:262)    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192)    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)    at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99)    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192)    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)    at org.springframework.web.filter.HttpPutFormContentFilter.doFilterInternal(HttpPutFormContentFilter.java:89)    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192)    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)    at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:77)    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192)    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)    at org.springframework.session.web.http.SessionRepositoryFilter.doFilterInternal(SessionRepositoryFilter.java:164)    at org.springframework.session.web.http.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:80)    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192)    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)    at org.springframework.cloud.sleuth.instrument.web.TraceFilter.doFilter(TraceFilter.java:150)    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192)    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)    at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:197)    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192)    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)    at org.springframework.boot.actuate.autoconfigure.MetricsFilter.doFilterInternal(MetricsFilter.java:107)    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192)    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198)    at org.apache.catalina.core.StandardContextValve.__invoke(StandardContextValve.java:108)    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java)    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:349)    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:784)    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:802)    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1410)    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)    at java.lang.Thread.run(Thread.java:748)Caused by: com.fasterxml.jackson.databind.JsonMappingException: Can not construct instance of java.util.LinkedHashMap: no String-argument constructor/factory method to deserialize from String value ('{"parentId":"0","delflag":"0","sidx":"sort"}'at [Source: java.io.PushbackInputStream@5231d0e2; line: 1, column: 1]    at com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:261)    at com.fasterxml.jackson.databind.DeserializationContext.instantiationException(DeserializationContext.java:1420)    at com.fasterxml.jackson.databind.DeserializationContext.handleMissingInstantiator(DeserializationContext.java:1011)    at com.fasterxml.jackson.databind.deser.ValueInstantiator._createFromStringFallbacks(ValueInstantiator.java:366)    at com.fasterxml.jackson.databind.deser.std.StdValueInstantiator.createFromString(StdValueInstantiator.java:307)    at com.fasterxml.jackson.databind.deser.std.MapDeserializer.deserialize(MapDeserializer.java:345)    at com.fasterxml.jackson.databind.deser.std.MapDeserializer.deserialize(MapDeserializer.java:27)    at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:3789)    at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2913)    at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:225)    ... 84 common frames omitted
  
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
           

分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.youkuaiyun.com/jiangjunshow

<think>好的,我现在遇到了一个关于Java反序列化的问题,错误信息是“Can not construct instance of java.time.LocalDateTime: no String-argument constructor/factory method to deserialize from String value ('2028-02-29 16:00:00')”。我需要仔细分析这个问题,找出原因并解决它。 首先,我需要理解错误信息的具体含义。错误提示说无法构造java.time.LocalDateTime的实例,因为没有接受String参数的构造器或工厂方法。也就是说,反序列化器在尝试将字符串'2028-02-29 16:00:00'转换为LocalDateTime对象时失败了,因为它找不到合适的方法来处理字符串输入。 接下来,我应该考虑为什么会出现这种情况。Java 8引入的java.time包中的类,比如LocalDateTime,通常需要通过特定的格式进行序列化和反序列化。默认情况下,某些JSON库如Jackson可能无法正确识别这些类型,尤其是当日期字符串的格式不符合默认预期时。例如,Jackson默认可能期望ISO-8601格式的日期时间,比如"2028-02-29T16:00:00",而用户提供的格式是"2028-02-29 16:00:00",中间使用的是空格而不是'T'分隔符。这可能导致了反序列化失败。 此外,可能还存在闰年的问题。2028年是否是闰年?2028能被4整除,且不是整百年,所以是闰年,2月29日是有效日期。因此日期本身是合法的,不是问题所在。 接下来,我需要检查使用的JSON库及其配置。通常,处理Java 8日期时间类型时,需要注册相应的模块,比如Jackson的JavaTimeModule。如果项目中没有正确配置这个模块,Jackson将无法正确处理LocalDateTime类型的序列化和反序列化。例如,可能需要添加以下依赖: 对于Maven项目: ```xml <dependency> <groupId>com.fasterxml.jackson.datatype</groupId> <artifactId>jackson-datatype-jsr310</artifactId> <version>2.13.0</version> </dependency> ``` 然后在ObjectMapper中注册模块: ```java ObjectMapper mapper = new ObjectMapper(); mapper.registerModule(new JavaTimeModule()); mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); ``` 另外,日期格式的问题也需要处理。如果输入的日期字符串格式与默认的ISO格式不同,可能需要使用@JsonFormat注解来指定格式: ```java public class MyClass { @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime dateTime; // getters and setters } ``` 这样,Jackson就会按照指定的格式来解析和生成日期字符串。 如果以上配置已经正确,但问题仍然存在,可能需要检查是否有旧版的Jackson库导致冲突,或者是否在反序列化过程中没有正确配置ObjectMapper。例如,某些框架可能使用自己的ObjectMapper实例,而没有注册必要的模块,这时需要确保所有相关的ObjectMapper实例都正确配置。 此外,还要考虑是否有其他自定义的反序列化器干扰了LocalDateTime的处理,或者是否有错误的getter/setter方法导致问题。 总结可能的原因: 1. 缺少JavaTimeModule的注册,导致Jackson无法处理LocalDateTime。 2. 日期字符串的格式不符合预期,需要指定自定义格式。 3. 依赖版本问题,如Jackson版本过旧或不兼容。 4. 配置未正确应用到所有ObjectMapper实例。 解决步骤建议: 1. 确认添加了jackson-datatype-jsr310依赖。 2. 在ObjectMapper中注册JavaTimeModule并禁用日期作为时间戳的序列化方式。 3. 在实体类的LocalDateTime字段上使用@JsonFormat注解指定正确的格式。 4. 检查项目中的Jackson版本是否兼容,并解决可能的版本冲突。 5. 确保所有使用到的ObjectMapper实例都应用了相同的配置。 通过逐一排查这些可能的原因,应该能够解决无法反序列化LocalDateTime的问题。</think>### 问题分析 出现错误 `Can not construct instance of java.time.LocalDateTime` 的主要原因是 **JSON反序列化库(如Jackson)无法将字符串 `'2028-02-29 16:00:00'` 转换为 `LocalDateTime` 对象**。常见原因如下: 1. **缺少 JavaTime 模块** Jackson 默认不支持 Java 8 的日期类型(如 `LocalDateTime`),需要手动注册 `JavaTimeModule`。 2. **日期格式不匹配** 输入的日期字符串格式 `yyyy-MM-dd HH:mm:ss` 与 Jackson 默认的 ISO 格式(`yyyy-MM-dd'T'HH:mm:ss`)不匹配。 3. **依赖或配置缺失** 未正确引入依赖或未全局配置 `ObjectMapper`。 --- ### 解决方案 #### 1. 添加 Jackson 日期模块依赖 确保项目中包含 `jackson-datatype-jsr310`: ```xml <!-- Maven --> <dependency> <groupId>com.fasterxml.jackson.datatype</groupId> <artifactId>jackson-datatype-jsr310</artifactId> <version>2.13.0</version> </dependency> ``` #### 2. 注册 JavaTimeModule 并配置格式 在 `ObjectMapper` 中注册模块并禁用时间戳格式: ```java ObjectMapper mapper = new ObjectMapper(); mapper.registerModule(new JavaTimeModule()); mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); ``` #### 3. 指定日期格式注解 在实体类的 `LocalDateTime` 字段上添加 `@JsonFormat`: ```java public class MyEntity { @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime dateTime; // Getter 和 Setter } ``` #### 4. 检查日期合法性 虽然 2028 年是闰年(能被 4 整除且不为整百年),但需确保输入值合法: ```java String dateStr = "2028-02-29 16:00:00"; DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); LocalDateTime date = LocalDateTime.parse(dateStr, formatter); // 正常解析 ``` #### 5. 全局配置(Spring Boot) 在 `application.properties` 中指定全局格式: ```properties spring.jackson.date-format=yyyy-MM-dd HH:mm:ss spring.jackson.time-zone=GMT+8 spring.jackson.serialization.write-dates-as-timestamps=false ``` --- ### 总结步骤 1. **添加依赖**:引入 `jackson-datatype-jsr310`。 2. **注册模块**:在 `ObjectMapper` 中注册 `JavaTimeModule`。 3. **禁用时间戳格式**:`mapper.disable(WRITE_DATES_AS_TIMESTAMPS)`。 4. **注解指定格式**:在字段上使用 `@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")`。 5. **验证日期合法性**:确保输入的日期字符串可被解析。 通过以上步骤,Jackson 将能正确将 `"2028-02-29 16:00:00"` 转换为 `LocalDateTime` 对象。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值