为什么我一直在服务器上获取对象引用,而在本地系统上工作正常 [英] Why do I keep getting Object reference on server while it works fine on a local system

查看:111
本文介绍了为什么我一直在服务器上获取对象引用,而在本地系统上工作正常的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的类对象没有被转换成json,我认为它返回对象引用,尽管在本地执行它时,它完全执行。



这里是代码

  private def static sql 

private static List< ProductAlertsResponse> executeSelection(String query)
{
List< ProductAlertsResponse> prodAlerts = new ArrayList< ProductAlertsResponse>()
sql.eachRow(query)
{
ProductAlertsResponse prodAlert = new ProductAlertsResponse((String)it.id,(String)it.name,(String )it.description,(String)it.active,(String)it.release_date)
prodAlerts.add(prodAlert)
}
return prodAlerts
}

static main(args){

AppProperties.load()
sql = Sql.newInstance(jdbc:oracle:thin:@+ AppProperties.get(hostname) +:+ AppProperties.get(port)+:+ AppProperties.get(service),AppProperties.get(username),AppProperties.get(password),oracle.jdbc。 OracleDriver)

List< ProductAlertsResponse> sqlResult = executeSelection(select ID,NAME,DESCRIPTION,ACTIVE,RELEASE_DATE from productinfo where ACTIVE ='A')
$ b $ def json = new groovy.json.JsonBuilder([response:sqlResult])

String response = json.toPrettyString()
println$ response
}

这给了我以下回复:

  {
response:[
{
active:A,
release_date:2011-09-23 00:00:00.0,
id:1,
description:Test,
name:ABC7
},
{
active:A,
release_date:2012-01-19 00:00:00.0,
id:5,
description:Test1,
name:ABC3

{
active:A,
release_date:2011-09-23 00:00:00.0,
ID:3,
description:Test,
name:ABC1
},
{
active:A,
release_date:2012-01-19 00:00:00.0,
id:6,
description: Test2,
name:ABC2
}
]
}

在我的服务器上运行它(struts& )
$ b

  {
response:[commons chains)它给了我下面的json响应
com.est.dxclient.common.ProductAlertsResponse@67f797,
com.est.dxclient.common.ProductAlertsResponse@1e8f2a0,
com.est.dxclient.common.ProductAlertsResponse @ c3d9ac,
com.est.dxclient.common.ProductAlertsResponse@7d8bb
]
}


$ b 注意:我正在使用groovy 1.8.0



更新添加服务器端代码

 我的服务器端

类GetProductAlertsResponse implements命令{
// Command is import org.apache.commons.chain.Command
private def sql

@Override
public boolean execute(Context ctx)throws Exception
{
AppProperties.load()
sql = Sql.newInstance(jdbc:oracle:thin:@+ AppProperties.get(hostname)+:+ AppProperties.get(port)+: + AppPro appletperties.get(username),AppProperties.get(password),oracle.jdbc.OracleDriver)

列表< ProductAlertsResponse> sqlResult = executeSelection(select ID,NAME,DESCRIPTION,ACTIVE,RELEASE_DATE from productinfo where ACTIVE ='A')
$ b $ def json = new groovy.json.JsonBuilder([response:sqlResult])

/ *我想在这里调试代码* /
println sqlResult.size()

sqlResult.each {
println it.getName )
}

字符串响应= json.toPrettyString()

println内部命令$ response
ctx.put(CSMContextParams.response,response )
返回false;


$ b code
$ b $ p $在控制台上打印

$> p>

  4 
ABC7
ABC3
ABC1
ABC2
内部命令[
com.est.dxclient.common.ProductAlertsResponse@a63599,
com.est.dxclient.common.ProductAlertsResponse@156f14c,
com.est.dxclient.common.ProductAlertsResponse @ 9b​​a632,
com.est.dxclient.common.ProductAlertsResponse@bc5245
]


这个答案可能有帮助 - Grails JSONBuilder



也许您的服务器代码使用不同版本的Grails,或者Grails在本地环境和服务器环境中设置的不一样。


My class objects are not getting converted into json, I think it returns object references, though while executing it locally, it executes perfectly.

Here is the code

private def static sql

private static List<ProductAlertsResponse> executeSelection(String query)
{
    List<ProductAlertsResponse> prodAlerts=new ArrayList<ProductAlertsResponse>()
    sql.eachRow(query)
    {
        ProductAlertsResponse prodAlert=new ProductAlertsResponse((String)it.id,(String)it.name,(String)it.description,(String)it.active,(String)it.release_date)
        prodAlerts.add(prodAlert)
    }
    return prodAlerts
}

static main(args) {

    AppProperties.load()
    sql = Sql.newInstance("jdbc:oracle:thin:@"+AppProperties.get("hostname")+":"+AppProperties.get("port")+":"+AppProperties.get("service"), AppProperties.get("username"), AppProperties.get("password"),"oracle.jdbc.OracleDriver")

    List<ProductAlertsResponse> sqlResult=executeSelection("select ID,NAME,DESCRIPTION,ACTIVE,RELEASE_DATE from productinfo where ACTIVE='A'")

    def json = new groovy.json.JsonBuilder([response: sqlResult])

    String response=json.toPrettyString()
    println "$response"
}

This gives me back the following response

{
"response": [
    {
        "active": "A",
        "release_date": "2011-09-23 00:00:00.0",
        "id": "1",
        "description": "Test",
        "name": "ABC7"
    },
    {
        "active": "A",
        "release_date": "2012-01-19 00:00:00.0",
        "id": "5",
        "description": "Test1",
        "name": "ABC3"
    },
    {
        "active": "A",
        "release_date": "2011-09-23 00:00:00.0",
        "id": "3",
        "description": "Test",
        "name": "ABC1"
    },
    {
        "active": "A",
        "release_date": "2012-01-19 00:00:00.0",
        "id": "6",
        "description": "Test2",
        "name": "ABC2"
    }
]
}

While running it on my server (struts & commons chains) it gives me back the following json response (after removing static)

{
"response": [
    "com.est.dxclient.common.ProductAlertsResponse@67f797",
    "com.est.dxclient.common.ProductAlertsResponse@1e8f2a0",
    "com.est.dxclient.common.ProductAlertsResponse@c3d9ac",
    "com.est.dxclient.common.ProductAlertsResponse@7d8bb"
]
}

Note: I am using groovy 1.8.0

Update adding server side code

My server side

class GetProductAlertsResponse implements Command {
//Command is import org.apache.commons.chain.Command
    private def sql

    @Override
    public boolean execute(Context ctx) throws Exception 
    {
        AppProperties.load()
        sql = Sql.newInstance("jdbc:oracle:thin:@"+AppProperties.get("hostname")+":"+AppProperties.get("port")+":"+AppProperties.get("service"), AppProperties.get("username"), AppProperties.get("password"),"oracle.jdbc.OracleDriver")

        List<ProductAlertsResponse> sqlResult=executeSelection("select ID,NAME,DESCRIPTION,ACTIVE,RELEASE_DATE from productinfo where ACTIVE='A'")

        def json = new groovy.json.JsonBuilder([response: sqlResult])

        /*I am trying to debug the code here*/
        println sqlResult.size()

        sqlResult.each{
            println it.getName()
        }

        String response=json.toPrettyString()

        println "Inside commands $response"
        ctx.put(CSMContextParams.response,response)
        return false;

    }
}

On the console it prints

4
ABC7
ABC3
ABC1
ABC2
Inside commands [
    "com.est.dxclient.common.ProductAlertsResponse@a63599",
    "com.est.dxclient.common.ProductAlertsResponse@156f14c",
    "com.est.dxclient.common.ProductAlertsResponse@9ba632",
    "com.est.dxclient.common.ProductAlertsResponse@bc5245"
]

解决方案

This answer might help - Grails JSONBuilder.

Maybe your server code uses a different version of Grails, or Grails isn't setup the same between local and server environments.

这篇关于为什么我一直在服务器上获取对象引用,而在本地系统上工作正常的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆