...
Boolean toKillYourself = true;
if (RestContext.request.params.get('toKillYourself') != null) {
String toKillYourselfString = RestContext.request.params.get('toKillYourself');
if (String.isNotBlank(toKillYourselfString) && (toKillYourselfString.length() == 4 || toKillYourselfString.length() == 5)) {
toPullDeleted = Boolean.valueOf(toKillYourselfString);
} else {
// 'Wrong format of toKillYourself parameter ('+toKillYourselfString+')');
return null;
}
}
if (toKillYourself) {
...
Только сегодня узнал, что
Converts the specified string to a Boolean value and returns true if the specified string value is true. Otherwise, returns false.
В параметр сервиса передавалась единичка (1), и сервис, почему-то, не правильно работал :-)
Что-то монструозно все выглядит.
Зачем столько проверок?
А как бы ты написал?
toPullDeleted = Boolean.valueOf(RestContext.request.params.get('toKillYourself'));
Можно запостить на http://govnokod.ru/
Это оттуда взято ;-)
Сам ржал, что по другому никак не обойтись.
Именно так и было, до сегодня. Выяснилось, что можно передать 1 и СФ схавает это как false. И никто об этом знать не будет - не подходит.
Не стоит так делать)
Еще какая-то кастомная логика предполагается?
С toKillYourself? Не, только один раз используется.
Хотя, я вот теперь думаю, сделать свой Boolean.valueOf(), чтоб небыло таких приколов.
ну а чем не правильно что "1" это false? Не вижу тут криминала. Или у вас там может приходить 1 как true?
Если так то можно еще проще сделать
toPullDeleted = (RestContext.request.params.get('toKillYourself')=='true' || RestContext.request.params.get('toKillYourself')=='1')как собственно и первый вариант переписать
toPullDeleted = RestContext.request.params.get('toKillYourself') == 'true'Что-то совсем твой пример мозг взорвал.
Это ж простая задача - определить пришел ли нужный параметр.
Всегда одной строчкой кода решался. и без всяких Boolean.valueOf()
Сделай мапу
Map<String, Boolean> stringToBooleanMap = new Map<String, Boolean>{
'true' => true,
'1' => true,
'false' => false,
'0' => false
}
String toPullDeletedString = RestContext.request.params.get('toKillYourself');
Boolean toPullDeleted = toPullDeletedString != null && stringToBooleanMap.contains(toPullDeletedString.toLowerCase()) ? stringToBooleanMap.get(toPullDeletedString.toLowerCase()) : false;Если так то можно еще проще сделать
toPullDeleted = (RestContext.request.params.get('toKillYourself')=='true' || RestContext.request.params.get('toKillYourself')=='1')как собственно и первый вариант переписать
toPullDeleted = RestContext.request.params.get('toKillYourself') == 'true'
Я думал, что если приходит 'true' или 'false', то все нормально, а если что-то другое, то вывалится с ошибкой.
ну все у меня вообще мозг в осадок выпал
При чем здесь iOS.
Он присылает 1 вместо true
Что для сервиса критично - получить правильный true параметр? Если да, то пусть все возможные варианты, означающие true обрабатываются в условии, а всё остальное будет false, например:
String toKillYourselfString = RestContext.request.params.get('toKillYourself');
Boolean toKillYourself = (toKillYourselfString == '1' || toKillYourselfString == 'true');
Да, именно так я и решил сделать и не заморачиваться с конвертацией в Boolean.