2015-05-12 5 views
3

я добавил этот метод в моем действии распорок,Как игнорировать узел корневого JSON в Struts2 действия

public String execute() { 
    long start = System.currentTimeMillis(); 
    simDetails = new SIMDetails(); 
    return GET_SIM_DETAILS; 
} 

и добавляемые ниже действия в распорок в конфигурационном файле,

<result type="json" name="getSIMDetails"> 
    <param name="noCache">true</param> 
    <param name="includeProperties">simDetails.*</param> 
</result> 

Тогда я получил ниже JSON ответ

{ 
    "simDetails": { 
     "void": null, 
     "ban": null, 
     "currentTariff": null, 
     "currentTariffDescription": null, 
     "defaultTariff": null, 
     "defaultTariffDescription": null, 
     "imsi": null, 
     "packageItemId": null, 
     "simSerialNumber": null, 
     "simStatus": null, 
     "simStatusCC": null, 
     "status": null, 
     "subscriberNumber": null, 
     "subsidaryCode": null 
    } 
} 

но мне нужен этот ответ вместо указанного выше,

{ 
    "void": null, 
    "ban": null, 
    "currentTariff": null, 
    "currentTariffDescription": null, 
    "defaultTariff": null, 
    "defaultTariffDescription": null, 
    "imsi": null, 
    "packageItemId": null, 
    "simSerialNumber": null, 
    "simStatus": null, 
    "simStatusCC": null, 
    "status": null, 
    "subscriberNumber": null, 
    "subsidaryCode": null 
} 

Любая идея, чтобы получить требуемый ответ, внесите вышеуказанное поле в мой класс действий.

+0

Что вы получите, если используете ' simDetails' (и удалить includeProperties)? –

+0

P.S: у вас такой же точный аватар [Cletus] (http://stackoverflow.com/users/18393/cletus) ... –

+1

Он работает по мере необходимости. спасибо большое, вы можете добавить его как ответ, чтобы принять его –

ответ

2

Вы можете использовать атрибут root, как указано в разделе Root Object документации:

Используйте (выражение OGNL) атрибут «корень», чтобы указать корневой объект для сериализации.

В вашем случае:

<result type="json" name="getSIMDetails"> 
    <param name="noCache">true</param> 
    <param name="root">simDetails</param> 
</result> 

P.S: this answer может быть достойным чтения. И в другом ответе на этот вопрос вы также можете увидеть технику Stream, предложенную @IntelliData.

+0

Если я использовал ' dLink' он возвращает мне ** null ** и '' Работает, и я не хочу, чтобы все атрибуты были ответом, почему это так, любые предложения, пожалуйста, –

+0

Конечно;) Это потому, что ваша переменная имеет первое слово длиной в одну букву, а Eclipse генерирует getter 'getdLink' вместо 'getDLink', как требуется Struts2. Просто вручную измените getter в 'public String getDLink() {return dLink;}', и он будет работать. О, и подумайте над этим ответом, спасибо @shantaram_t. –

+0

Связанный: https://stackoverflow.com/a/27928298/1654265 –

0

Для того, чтобы избежать вашей очень такая же проблема, я обычно возвращают JSON, используя следующий struts.xml (в отличие от JSON возвращаемого типа):

   <result name="success" type="stream"> 
        <param name="contentType">text/html</param> 
        <param name="inputName">inputStream</param> 
       </result> 

Я держу «InputStream» переменную типа «InputStream» в моем классе действий, а в методе execute() я вручную назначаю JSON «inputStream». Это позволяет мне настраивать JSON точно так, как я хочу, и это именно то, что вернет «inputStream».

Надеюсь, что это поможет!