AMcoder - javascript, python, java, html, php, sql

jooq java.lang.CastException. java.lang.Տողը չի կարող փոխանցվել java.lang.Number-ին

Նախագծում ես օգտագործում եմ jklingsporn vertx-jooq-ը որպես jooq-CodeGenerator՝ vertxified DAO-ներ և POJOS-ները որպես async ստեղծելու համար: Ես ունեմ ստեղծված ContractDao.java դաս

import io.vertx.core.Future;
import io.github.jklingsporn.vertx.jooq.classic.async.AsyncClassicQueryExecutor;

/**
 * This class is generated by jOOQ.
 */
@Generated(value = { "http://www.jooq.org", "jOOQ version:3.10.6" }, comments = "This class is generated by jOOQ")
@SuppressWarnings({ "all", "unchecked", "rawtypes" })
public class ContractDao extends AbstractAsyncVertxDAO<ContractRecord, jooq.tables.pojos.Contract, Long, Future<List<jooq.tables.pojos.Contract>>, Future<jooq.tables.pojos.Contract>, Future<Integer>, Future<Long>> implements io.github.jklingsporn.vertx.jooq.classic.VertxDAO<ContractRecord, jooq.tables.pojos.Contract, Long> {

    /**
     * @param configuration
     *            Used for rendering, so only SQLDialect must be set and must be one
     *            of the MYSQL types or POSTGRES.
     * @param delegate
     *            A configured AsyncSQLClient that is used for query execution
     */
    public ContractDao(Configuration configuration, io.vertx.ext.asyncsql.AsyncSQLClient delegate) {
        super(Contract.CONTRACT, jooq.tables.pojos.Contract.class, new AsyncClassicQueryExecutor<ContractRecord, jooq.tables.pojos.Contract, Long>(configuration, delegate, jooq.tables.pojos.Contract::new, Contract.CONTRACT));
    }
  ....

 }

որն օգտագործում է ստեղծված Contract.java pojo դասը BigDecimal դաշտով:

/**
 * This class is generated by jOOQ.
 */
@Generated(
    value = {
        "http://www.jooq.org",
        "jOOQ version:3.10.6"
    },
    comments = "This class is generated by jOOQ"
)
@SuppressWarnings({ "all", "unchecked", "rawtypes" })
public class Contract implements VertxPojo, IContract {

    ...
    private BigDecimal costValue;
    ...

}

ապա vert.x Verticle դասում ես ունեմ fetchContracts մեթոդ.

    private void fetchContracts(final Message<Void> msg) {
        contractDao.findAll().setHandler(arContracts -> {
            ...
        });
    }

մինչ այժմ այն ​​լավ է աշխատում, բայց եթե ես ունեմ թվային արժեք Table Contract դաշտում costValue, երբ ես կանչում եմ fetchContracts մեթոդը, ես բացառություն եմ ստանում:

java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Number

Կարծում եմ, որ կա տվյալների տիպի որոշակի անհամապատասխանություն: Ես տեսել եմ, եթե ճիշտ եմ հասկանում, որ դա կարող է լուծվել Տվյալների տիպի հարկադրմամբ կամ քասթինգով, ինչպես բացատրված է այստեղ՝ Ձուլում org.jooq.TableField‹Long› org.jooq.TableField‹BigDecimal›

Բայց կոնկրետ այս դեպքում ինձ համար պարզ չէ, թե որտեղ և ինչպես պետք է կատարվի քասթինգը։

Ես փորձեցի նման բան.

    private void fetchContracts(final Message<Void> msg) {
        jooq.tables.Contract.CONTRACT.COST_VALUE.coerce(String.class);
        contractDao.findAll().setHandler(arContracts -> {
            ...
        });
    }

Բայց դա չի աշխատում։ Որևէ գաղափար: Նախապես շնորհակալություն.

Խմբագրվել է՝

Ես ավելացնում եմ stack trace-ը.

[ERROR] 2018-08-07 09:42:54,368: java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Number ( de.bfft.licencemgmt.server.UserVerticle.lambda$100(UserVerticle.java:998)) [vert.x-eventloop-thread-1]  []
[ERROR] 2018-08-07 09:42:54,368: (RECIPIENT_FAILURE,500) java.lang.String cannot be cast to java.lang.Number ( de.bfft.licencemgmt.client.viewslogic.agreements.AgreementsViewLogic.lambda$6(AgreementsViewLogic.java:61)) [vert.x-eventloop-thread-4]  []
[ERROR] 2018-08-07 09:42:54,368: Failed to handleMessage. address: 1 ( io.vertx.core.eventbus.impl.HandlerRegistration.deliver(HandlerRegistration.java:228)) [vert.x-eventloop-thread-4]  []
java.lang.NullPointerException: null
    at com.vaadin.server.AbstractExtension.extend(AbstractExtension.java:77) ~[vaadin-server-8.4.4.jar:8.4.4]
    at com.vaadin.ui.Notification.show(Notification.java:502) ~[vaadin-server-8.4.4.jar:8.4.4]
    at de.bfft.licencemgmt.client.viewslogic.agreements.AgreementsViewLogic.lambda$0(AgreementsViewLogic.java:39) ~[classes/:?]
    at io.vertx.core.impl.FutureImpl.tryFail(FutureImpl.java:165) ~[vertx-core-3.5.1.jar:3.5.1]
    at io.vertx.core.impl.FutureImpl.fail(FutureImpl.java:97) ~[vertx-core-3.5.1.jar:3.5.1]
    at de.bfft.licencemgmt.client.viewslogic.agreements.AgreementsViewLogic.lambda$6(AgreementsViewLogic.java:62) ~[classes/:?]
    at io.vertx.core.eventbus.impl.EventBusImpl.lambda$convertHandler$1(EventBusImpl.java:349) ~[vertx-core-3.5.1.jar:3.5.1]
    at io.vertx.core.eventbus.impl.HandlerRegistration.deliver(HandlerRegistration.java:223) ~[vertx-core-3.5.1.jar:3.5.1]
    at io.vertx.core.eventbus.impl.HandlerRegistration.handle(HandlerRegistration.java:200) ~[vertx-core-3.5.1.jar:3.5.1]
    at io.vertx.core.eventbus.impl.EventBusImpl.lambda$deliverToHandler$3(EventBusImpl.java:533) ~[vertx-core-3.5.1.jar:3.5.1]
    at io.vertx.core.impl.ContextImpl.lambda$wrapTask$2(ContextImpl.java:339) ~[vertx-core-3.5.1.jar:3.5.1]
    at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:163) [netty-common-4.1.19.Final.jar:4.1.19.Final]
    at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:404) [netty-common-4.1.19.Final.jar:4.1.19.Final]
    at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:463) [netty-transport-4.1.19.Final.jar:4.1.19.Final]
    at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:886) [netty-common-4.1.19.Final.jar:4.1.19.Final]
    at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) [netty-common-4.1.19.Final.jar:4.1.19.Final]
    at java.lang.Thread.run(Thread.java:748) [?:1.8.0_171]
[ERROR] 2018-08-07 09:42:54,383: Unhandled exception ( io.vertx.core.impl.ContextImpl.lambda$wrapTask$2(ContextImpl.java:345)) [vert.x-eventloop-thread-4]  []
java.lang.NullPointerException: null
    at com.vaadin.server.AbstractExtension.extend(AbstractExtension.java:77) ~[vaadin-server-8.4.4.jar:8.4.4]
    at com.vaadin.ui.Notification.show(Notification.java:502) ~[vaadin-server-8.4.4.jar:8.4.4]
    at de.bfft.licencemgmt.client.viewslogic.agreements.AgreementsViewLogic.lambda$0(AgreementsViewLogic.java:39) ~[classes/:?]
    at io.vertx.core.impl.FutureImpl.tryFail(FutureImpl.java:165) ~[vertx-core-3.5.1.jar:3.5.1]
    at io.vertx.core.impl.FutureImpl.fail(FutureImpl.java:97) ~[vertx-core-3.5.1.jar:3.5.1]
    at de.bfft.licencemgmt.client.viewslogic.agreements.AgreementsViewLogic.lambda$6(AgreementsViewLogic.java:62) ~[classes/:?]
    at io.vertx.core.eventbus.impl.EventBusImpl.lambda$convertHandler$1(EventBusImpl.java:349) ~[vertx-core-3.5.1.jar:3.5.1]
    at io.vertx.core.eventbus.impl.HandlerRegistration.deliver(HandlerRegistration.java:223) ~[vertx-core-3.5.1.jar:3.5.1]
    at io.vertx.core.eventbus.impl.HandlerRegistration.handle(HandlerRegistration.java:200) ~[vertx-core-3.5.1.jar:3.5.1]
    at io.vertx.core.eventbus.impl.EventBusImpl.lambda$deliverToHandler$3(EventBusImpl.java:533) ~[vertx-core-3.5.1.jar:3.5.1]
    at io.vertx.core.impl.ContextImpl.lambda$wrapTask$2(ContextImpl.java:339) ~[vertx-core-3.5.1.jar:3.5.1]
    at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:163) [netty-common-4.1.19.Final.jar:4.1.19.Final]
    at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:404) [netty-common-4.1.19.Final.jar:4.1.19.Final]
    at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:463) [netty-transport-4.1.19.Final.jar:4.1.19.Final]
    at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:886) [netty-common-4.1.19.Final.jar:4.1.19.Final]
    at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) [netty-common-4.1.19.Final.jar:4.1.19.Final]
    at java.lang.Thread.run(Thread.java:748) [?:1.8.0_171]

Իսկ UserVerticle.java դասում բացառություն առաջացնող կոդը, stack trace-ի 998 տողը համապատասխանում է «log.error(arContracts.cause())» ստորև գտնվող երրորդ տողին.

    private void fetchContracts(final Message<Void> msg) {
        contractDao.findAll().setHandler(arContracts -> {
            if (arContracts.failed()) {
                log.error(arContracts.cause());
                msg.fail(500, arContracts.cause().getMessage());
                return;
            }
            final List<Contract> contracts = arContracts.result();

            log.debug("Found {} contracts", contracts.size());
            final JsonArray jsonArray = new JsonArray(
                    contracts.stream().map(contract -> contract.toJson()).collect(Collectors.toList()));
            msg.reply(jsonArray);
        });
    }
06.08.2018

  • Խնդրում ենք փակցնել ստեկի հետքը: 07.08.2018
  • Բացի այդ, խնդրում ենք տեղադրել բացառություն պատճառող իրական կոդը: Բացառությունը, հավանաբար, նետված է ...-ից 07.08.2018

Պատասխանները:


1

Խնդիրը json-ում տասնորդականի փոխակերպման մեջ էր: Json-ը ավտոմատ կերպով վերածում է տասնորդական թվերը տողերի, բայց այն սպասում էր տասնորդական թվի, որը ինչ-որ կերպ առաջացրեց բացառություն

Պարզվեց, որ կար հավելյալ CustomVertxGenerator.java դաս, որը ընդլայնում է ClassicAsyncVertxGenerator-ը vert.x-jooq-ի համար՝ JSON-ի փոխակերպման ժամանակ տողից լրացուցիչ տիպեր մշակելու մեթոդով: Եվ սա ինձ համար նորություն էր:

Երբ postgresql db-ից թվային տիպերի փոխարկումը ամրագրվեց դասի մեթոդով, խնդիրը լուծվեց:

09.08.2018
Նոր նյութեր

Օգտագործելով Fetch Vs Axios.Js-ը՝ HTTP հարցումներ կատարելու համար
JavaScript-ը կարող է ցանցային հարցումներ ուղարկել սերվեր և բեռնել նոր տեղեկատվություն, երբ դա անհրաժեշտ լինի: Օրինակ, մենք կարող ենք օգտագործել ցանցային հարցումը պատվեր ներկայացնելու,..

Տիրապետել հանգստության արվեստին. մշակողի ուղեցույց՝ ճնշման տակ ծաղկելու համար
Տիրապետել հանգստության արվեստին. մշակողի ուղեցույց՝ ճնշման տակ ծաղկելու համար Ինչպե՞ս հանգստացնել ձեր միտքը և աշխատեցնել ձեր պրոցեսորը: Ինչպես մնալ հանգիստ և զարգանալ ճնշման տակ...

Մեքենայի ուսուցում բանկային և ֆինանսների ոլորտում
Բարդ, խելացի անվտանգության համակարգերը և հաճախորդների սպասարկման պարզեցված ծառայությունները բիզնեսի հաջողության բանալին են: Ֆինանսական հաստատությունները, մասնավորապես, պետք է առաջ մնան կորի..

Ես AI-ին հարցրի կյանքի իմաստը, այն ինչ ասում էր, ցնցող էր:
Այն պահից ի վեր, երբ ես իմացա Արհեստական ​​ինտելեկտի մասին, ես հիացած էի այն բանով, թե ինչպես է այն կարողանում հասկանալ մարդկային նորմալ տեքստը, և այն կարող է առաջացնել իր սեփական արձագանքը դրա..

Ինչպես սովորել կոդավորումը Python-ում վագրի պես:
Սովորելու համար ծրագրավորման նոր լեզու ընտրելը բարդ է: Անկախ նրանից, թե դուք սկսնակ եք, թե առաջադեմ, դա օգնում է իմանալ, թե ինչ թեմաներ պետք է սովորել: Ծրագրավորման լեզվի հիմունքները, դրա..

C++-ի օրական բիթ(ե) | Ամենաերկար պալինդրոմային ենթաշարը
C++ #198-ի ամենօրյա բիթ(ե), Ընդհանուր հարցազրույցի խնդիր. Ամենաերկար պալինդրոմային ենթատող: Այսօր մենք կանդրադառնանք հարցազրույցի ընդհանուր խնդրին. Ամենաերկար palindromic substring...

Kydavra ICAReducer՝ ձեր տվյալների ծավալայինությունը նվազեցնելու համար
Ի՞նչ է ICAReducer-ը: ICAReducer-ն աշխատում է հետևյալ կերպ. այն նվազեցնում է նրանց միջև բարձր փոխկապակցված հատկանիշները մինչև մեկ սյունակ: Բավականին նման է PCAreducer-ին, չնայած այն..