烦:DB2 V9.5 ERRORS:[encoding not supported]/[SQLCODE=-104, SQLSTATE=42601]

本文解决DB2 V9.5中因驱动包版本不匹配导致的异常问题,包括encodingnotsupported及SQLCODE=-104错误,并提供了详细的堆栈跟踪。

DB2    V9.5 经常出现以下异常,都是因为DB2的驱动包版本问题,大家碰到子类问题可以首先考虑驱动包版本的原因。

驱动包:db2java.jar         db2jcc.jar               db2jcc_license_cu.jar

 

异常:【encoding not supported】

org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory, cause: encoding not supported!!

 

 

下面的异常主要是使用了  with  ur   导致:

异常:【com.ibm.db2.jcc.a.nn: DB2 SQL Error: SQLCODE=-104, SQLSTATE=42601, SQLERRMC=with;esc,a.task_name desc;), DRIVER=3.52.95】

com.linkage.bace.core.reflect.exception.ReflectionError:  invoke method 'queryIndexTaskList' with arguments []
        at com.linkage.bace.core.reflect.method.Invoker.invoke(Invoker.java:59)
        at com.linkage.bace.core.db.MCTransaction.execute(MCTransaction.java:104)
        at com.linkage.bace.core.m.DBModuler.execute(DBModuler.java:55)
        at com.linkage.bace.core.act.MCActioner.executeCallMethod(MCActioner.java:140)
        at com.linkage.bace.core.act.MCActioner.execute(MCActioner.java:64)
        at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:484)
        at com.linkage.bace.core.act.MCRequestProcessor.process(MCRequestProcessor.java:93)
        at com.linkage.bace.core.act.MCActionServlet.process(MCActionServlet.java:56)
        at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:507)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at com.linkage.bi.util.SystemInfoFilter.doFilter(SystemInfoFilter.java:216)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849)
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
        at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454)
        at java.lang.Thread.run(Thread.java:619)
Caused by: java.lang.reflect.InvocationTargetException
        at sun.reflect.GeneratedMethodAccessor47.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at com.linkage.bace.core.reflect.method.Invoker.invoke(Invoker.java:57)
        ... 25 more
Caused by: com.ibm.db2.jcc.a.nn: DB2 SQL Error: SQLCODE=-104, SQLSTATE=42601, SQLERRMC=with;esc,a.task_name desc;), DRIVER=3.52.95
        at com.ibm.db2.jcc.a.ad.a(ad.java:666)
        at com.ibm.db2.jcc.a.ad.a(ad.java:60)
        at com.ibm.db2.jcc.a.ad.a(ad.java:127)
        at com.ibm.db2.jcc.a.rl.c(rl.java:2424)
        at com.ibm.db2.jcc.a.rl.d(rl.java:2401)
        at com.ibm.db2.jcc.a.rl.a(rl.java:1902)
        at com.ibm.db2.jcc.t4.db.g(db.java:138)
        at com.ibm.db2.jcc.t4.db.a(db.java:38)
        at com.ibm.db2.jcc.t4.t.a(t.java:32)
        at com.ibm.db2.jcc.t4.sb.h(sb.java:141)
        at com.ibm.db2.jcc.a.rl.Y(rl.java:1873)
        at com.ibm.db2.jcc.a.sl.bc(sl.java:2526)
        at com.ibm.db2.jcc.a.sl.e(sl.java:3227)
        at com.ibm.db2.jcc.a.sl.Ob(sl.java:569)
        at com.ibm.db2.jcc.a.sl.executeQuery(sl.java:543)
        at org.apache.commons.dbcp.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:205)
        at com.linkage.bace.ibatis.IbatisDAO.handlerForArray(IbatisDAO.java:254)
        at com.linkage.bace.ibatis.IbatisDAO.queryJdbc(IbatisDAO.java:140)
        at com.linkage.bace.core.m.atom.PagerModuler.queryRowNumber(PagerModuler.java:209)
        at com.linkage.bace.core.m.atom.PagerModuler.wrapperSql(PagerModuler.java:100)
        at com.linkage.bace.core.m.atom.PagerModuler.wrapperUid(PagerModuler.java:60)
        at com.linkage.bace.core.m.atom.PagerModuler.<init>(PagerModuler.java:44)
        at com.linkage.bi.powershow.query.QueryListModule.queryIndexTaskList(QueryListModule.java:205)
        ... 29 more

在处理 HTTP 请求时,出现 `Content type &#39;application/json;charset=UTF-8&#39; not supported` 错误通常表明服务器端无法处理客户端发送的 JSON 格式数据。这种错误在 Spring Boot 等基于 Java 的 Web 框架中较为常见。以下是几种常见的原因及对应的解决方案: ### 1. 确保后端支持 JSON 格式解析 检查项目中是否引入了 JSON 处理库,例如 Jackson 或 Gson。如果使用 Spring Boot,默认情况下会使用 Jackson 作为 JSON 解析器。确保 `pom.xml`(Maven)或 `build.gradle`(Gradle)中包含 Jackson 依赖: **Maven:** ```xml <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> </dependency> ``` **Gradle:** ```groovy implementation &#39;com.fasterxml.jackson.core:jackson-databind:2.13.0&#39; ``` 如果缺少这些依赖,Spring Boot 将无法正确解析 JSON 格式的请求体 [^2]。 ### 2. 检查请求头中的 `Content-Type` 确保请求头中明确指定了 `Content-Type: application/json;charset=UTF-8`。如果前端没有正确设置该请求头,或者设置为 `text/plain` 或其他类型,服务器可能无法识别并拒绝处理请求。 例如,使用 JavaScript 的 `fetch` API 发送请求时,可以这样设置请求头: ```javascript fetch(&#39;/api/endpoint&#39;, { method: &#39;POST&#39;, headers: { &#39;Content-Type&#39;: &#39;application/json;charset=UTF-8&#39; }, body: JSON.stringify(data) }); ``` ### 3. 检查请求体中的 JSON 数据格式 确保发送的 JSON 数据格式正确,并且与后端定义的接收类结构匹配。如果 JSON 中的键(key)与后端类的属性名不一致,Spring 无法完成自动映射,从而导致解析失败 [^2]。 例如,后端定义的接收类: ```java public class UserRequest { private String name; private int age; // Getters and Setters } ``` 那么,前端发送的 JSON 应该是: ```json { "name": "John", "age": 30 } ``` 如果前端发送了 `"userName"` 而不是 `"name"`,Spring 将无法映射到 `UserRequest` 类。 ### 4. 自定义 `HttpMessageConverter` 如果以上步骤无法解决问题,可以尝试显式配置 `HttpMessageConverter`,确保 Spring 支持 JSON 格式解析。例如,在配置类中添加以下代码: ```java @Configuration public class WebConfig implements WebMvcConfigurer { @Override public void configureMessageConverters(List<HttpMessageConverter<?>> converters) { converters.add(new MappingJackson2HttpMessageConverter()); } } ``` ### 5. 检查字符编码问题 确保请求中的字符编码与服务器端配置一致。通常,`UTF-8` 是默认编码,但某些情况下可能需要显式指定。可以在 Spring Boot 的 `application.properties` 中添加以下配置: ```properties spring.http.encoding.charset=UTF-8 spring.http.encoding.enabled=true spring.http.encoding.force=true ``` ### 总结 解决 `Content type &#39;application/json;charset=UTF-8&#39; not supported` 错误的关键在于确保后端支持 JSON 解析、请求头中正确设置 `Content-Type`、JSON 数据格式与后端类结构匹配,以及服务器端的字符编码配置正确。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值