【问题标题】:Grails Illigal Argument ExceptionGrails 非法参数异常
【发布时间】:2014-03-26 05:27:38
【问题描述】:
package com.lk

class Stock {
    static expose = 'stock'
    long id
    String symbol
    String name
    BigDecimal price
    long sharevolume
    long tradevolume
    Float turnover
    BigDecimal change
    BigDecimal changePercentage
    long quantity
    /*Float open*/
    Float hiTrade
    Float loTrade
    Date tradesTransacttime
    Float previousClose

    static mapping = {
            table 'VIEW_CD_TRADE_SUMMARY_NO_DEBT'
            version false
            autoTimestamp false
        }

    static api =
            [
                excludedFields: ["errors", "attached", "properties"],
                list: { params ->
                    if (params.code?.equals('gvt123')) {
                        if (params.exclude) {
                            api.excludedFields = ["errors", "attached", "properties"]
                            params.exclude.split(",").each { api.excludedFields << it?.trim() }
                        } else {
                            api.excludedFields = ["errors", "attached", "properties"]
                        }

                        //println("params -->("+params)

                        params.id ? Stock.findAllByIdInList(params.id.split(",").collect { it as long }) : Stock.list(params)


                    } else {
                        "Invalid Request"
                    }
                        },
                count: { params -> if(params.code?.equals('gvt123')) {
                                          params.id ? Stock.countByIdInList(params.id.split(",").collect { it as long }) : Stock.count()
                                        }else{
                                           0
                                        }}
            ]

}

请在 Stock.groovy 文件上方查找,当我运行它时出现以下异常。请帮帮我。

URI /cses/json/stock
Class java.lang.IllegalArgumentException
Message null

有什么方法可以处理异常检查什么条目带有错误值。如果需要,我也可以添加 Oracle View。

堆栈跟踪如下

java.lang.IllegalArgumentException
        at com.lk.Stock$__clinit__closure2.doCall(Stock.groovy:41)
        at org.grails.plugins.rest.JsonRestApiController$_closure1.doCall(JsonRestApiController.groovy:14)
        at grails.plugin.cache.web.filter.PageFragmentCachingFilter.doFilter(PageFragmentCachingFilter.java:195)
        at grails.plugin.cache.web.filter.AbstractFilter.doFilter(AbstractFilter.java:63)
        at com.brandseye.cors.CorsFilter.doFilter(CorsFilter.java:63)
        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
        at java.lang.Thread.run(Thread.java:662)
2014-03-26 09:58:54,463 [http-bio-8080-exec-70] ERROR errors.GrailsExceptionResolver  - IllegalArgumentException occurred when processing request: [GET] /cses/json/stock
Stacktrace follows:
java.lang.IllegalArgumentException
        at com.lk.Stock$__clinit__closure2.doCall(Stock.groovy:41)
        at org.grails.plugins.rest.JsonRestApiController$_closure1.doCall(JsonRestApiController.groovy:14)
        at grails.plugin.cache.web.filter.PageFragmentCachingFilter.doFilter(PageFragmentCachingFilter.java:195)
        at grails.plugin.cache.web.filter.AbstractFilter.doFilter(AbstractFilter.java:63)
        at com.brandseye.cors.CorsFilter.doFilter(CorsFilter.java:63)
        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
        at java.lang.Thread.run(Thread.java:662)
2014-03-26 09:58:57,676 [http-bio-8080-exec-71] ERROR errors.GrailsExceptionResolver  - IllegalArgumentException occurred when processing request: [GET] /cses/json/stock
Stacktrace follows:
java.lang.IllegalArgumentException
        at com.lk.Stock$__clinit__closure2.doCall(Stock.groovy:41)
        at org.grails.plugins.rest.JsonRestApiController$_closure1.doCall(JsonRestApiController.groovy:14)
        at grails.plugin.cache.web.filter.PageFragmentCachingFilter.doFilter(PageFragmentCachingFilter.java:195)
        at grails.plugin.cache.web.filter.AbstractFilter.doFilter(AbstractFilter.java:63)
        at com.brandseye.cors.CorsFilter.doFilter(CorsFilter.java:63)
        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
        at java.lang.Thread.run(Thread.java:662)
2014-03-26 10:08:36,170 [http-bio-8080-exec-83] ERROR errors.GrailsExceptionResolver  - IllegalArgumentException occurred when processing request: [GET] /cses/json/stock
Stacktrace follows:
java.lang.IllegalArgumentException
        at com.lk.Stock$__clinit__closure2.doCall(Stock.groovy:41)
        at org.grails.plugins.rest.JsonRestApiController$_closure1.doCall(JsonRestApiController.groovy:14)
        at grails.plugin.cache.web.filter.PageFragmentCachingFilter.doFilter(PageFragmentCachingFilter.java:195)
        at grails.plugin.cache.web.filter.AbstractFilter.doFilter(AbstractFilter.java:63)
        at com.brandseye.cors.CorsFilter.doFilter(CorsFilter.java:63)
        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
        at java.lang.Thread.run(Thread.java:662)
2014-03-26 10:08:42,807 [http-bio-8080-exec-3] ERROR errors.GrailsExceptionResolver  - IllegalArgumentException occurred when processing request: [GET] /cses/json/stock
Stacktrace follows:
java.lang.IllegalArgumentException
        at com.lk.Stock$__clinit__closure2.doCall(Stock.groovy:41)
        at org.grails.plugins.rest.JsonRestApiController$_closure1.doCall(JsonRestApiController.groovy:14)
        at grails.plugin.cache.web.filter.PageFragmentCachingFilter.doFilter(PageFragmentCachingFilter.java:195)
        at grails.plugin.cache.web.filter.AbstractFilter.doFilter(AbstractFilter.java:63)
        at com.brandseye.cors.CorsFilter.doFilter(CorsFilter.java:63)
        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
        at java.lang.Thread.run(Thread.java:662)
2014-03-26 10:09:03,060 [http-bio-8080-exec-29] ERROR errors.GrailsExceptionResolver  - IllegalArgumentException occurred when processing request: [GET] /cses/json/stock
Stacktrace follows:
java.lang.IllegalArgumentException
        at com.lk.Stock$__clinit__closure2.doCall(Stock.groovy:41)
        at org.grails.plugins.rest.JsonRestApiController$_closure1.doCall(JsonRestApiController.groovy:14)
        at grails.plugin.cache.web.filter.PageFragmentCachingFilter.doFilter(PageFragmentCachingFilter.java:195)
        at grails.plugin.cache.web.filter.AbstractFilter.doFilter(AbstractFilter.java:63)
        at com.brandseye.cors.CorsFilter.doFilter(CorsFilter.java:63)
        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
        at java.lang.Thread.run(Thread.java:662)
2014-03-26 10:45:28,004 [http-bio-8080-exec-97] ERROR errors.GrailsExceptionResolver  - IllegalArgumentException occurred when processing request: [GET] /cses/json/stock
Stacktrace follows:
java.lang.IllegalArgumentException
        at com.lk.Stock$__clinit__closure2.doCall(Stock.groovy:41)
        at org.grails.plugins.rest.JsonRestApiController$_closure1.doCall(JsonRestApiController.groovy:14)
        at grails.plugin.cache.web.filter.PageFragmentCachingFilter.doFilter(PageFragmentCachingFilter.java:195)
        at grails.plugin.cache.web.filter.AbstractFilter.doFilter(AbstractFilter.java:63)
        at com.brandseye.cors.CorsFilter.doFilter(CorsFilter.java:63)
        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
        at java.lang.Thread.run(Thread.java:662)
2014-03-26 10:59:15,551 [http-bio-8080-exec-60] ERROR errors.GrailsExceptionResolver  - IllegalArgumentException occurred when processing request: [GET] /cses/json/stock
Stacktrace follows:
java.lang.IllegalArgumentException
        at com.lk.Stock$__clinit__closure2.doCall(Stock.groovy:41)
        at org.grails.plugins.rest.JsonRestApiController$_closure1.doCall(JsonRestApiController.groovy:14)
        at grails.plugin.cache.web.filter.PageFragmentCachingFilter.doFilter(PageFragmentCachingFilter.java:195)
        at grails.plugin.cache.web.filter.AbstractFilter.doFilter(AbstractFilter.java:63)
        at com.brandseye.cors.CorsFilter.doFilter(CorsFilter.java:63)
        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
        at java.lang.Thread.run(Thread.java:662)
2014-03-26 13:18:22,183 [http-bio-8080-exec-62] ERROR errors.GrailsExceptionResolver  - IllegalArgumentException occurred when processing request: [GET] /cses/json/stock
Stacktrace follows:
java.lang.IllegalArgumentException
        at com.lk.Stock$__clinit__closure2.doCall(Stock.groovy:41)
        at org.grails.plugins.rest.JsonRestApiController$_closure1.doCall(JsonRestApiController.groovy:14)
        at grails.plugin.cache.web.filter.PageFragmentCachingFilter.doFilter(PageFragmentCachingFilter.java:195)
        at grails.plugin.cache.web.filter.AbstractFilter.doFilter(AbstractFilter.java:63)
        at com.brandseye.cors.CorsFilter.doFilter(CorsFilter.java:63)
        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadP...

更新 - 添加堆栈跟踪。
谢谢。

【问题讨论】:

  • 发布完整的堆栈跟踪
  • 我不知道“有什么方法可以处理异常检查什么条目带有错误值。”方法。如果您可以创建一个简单的示例应用程序并将其与如何在应用程序中重新创建问题的说明一起发布到 github,那几乎肯定会导致解决方案。
  • Stock.groovy 的第 41 行有什么内容?

标签: grails groovy


【解决方案1】:

显然,错误出现在您班级的第 41 行,我认为是:

params.id ? Stock.findAllByIdInList(params.id.split(",").collect { it as long }) : Stock.list(params)

您确定params.id 是一个用逗号分隔的长字符串吗?

还要注意collect 方法返回的是java.lang.Long 列表,而不是您想要的原始long。为什么不尝试将Stock 类的id 属性更改为java.lang.Long? (事实上​​,我建议始终使用包装类)。

【讨论】:

    猜你喜欢
    • 2020-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多