При написании метода в моем приложении, использующем playframework
, мне нужно получить пользовательский ввод для полей Address
и выполнить поиск в db для соответствующего. Если я не могу найти соответствующий адрес, мне нужно создатьновый адрес.
Здесь только addressLine1
и country
являются обязательными полями.Пользователь может игнорировать addressLine2.
, принимая данные из html-формы, текстовые поля для необязательных полей возвращают пустую строку. Поэтому, чтобы протестировать создание Address, я решил создать Map<String,String>
, чтобыпередан методу POST
. Я попытался
addrparams = new Map<String,String>();
addrparams.put("addressline1","clayton st");
addrparams.put("country","US");
Это вызвало исключение нулевого указателя, когда запрос jpql пытался привязать значения к карте для полей отсутствующих опций.
String query="select distinct a from Address a where a.addressLine1=:addressline1 and a.addressLine2=:addressline2 and a.country=:country";
Address address = Address.find(query).bind("addressline1",addressline1).bind("addressline2",addressline2).bind("country", country).first();
..
Я решил это, поставив пустые строки для всех необязательных полей
addrparams = new Map<String,String>();
addrparams.put("addressline1","clayton st");
addrparams.put("addressline2","");
addrparams.put("country","US");
Я надеюсь, что это правильный способ сделать это .. Если кто-то может указать на лучший подход при тестировании таких ситуаций, это мне очень поможет
Адрес класса
@Entity
public class Address extends Model {
@Required
String addressLine1;
String addressLine2;
@Required
String country;
...
}
обновление: Трассировка стека здесь
Account.java:207 где nullptrисключение, это строка
Address address = Address.find(query).bind("addressline1",addressline1).bind("addressline2",addressline2).bind("country", country).first();