gpt4 book ai didi

java - 测试可选字段值的正确方法

转载 作者:行者123 更新时间:2023-12-01 15:43:26 26 4
gpt4 key购买 nike

在我的应用程序中编写一个使用 playframework 的方法时,我需要获取 Address 的用户输入字段并在数据库中搜索匹配的地址。如果找不到匹配的地址,我必须创建一个新地址。

仅此addressLine1country是必填字段。用户可以忽略addressLine2。

从 html 表单获取输入时,可选字段的文本字段返回一个空字符串。因此,为了测试 Address 的创建,我决定创建一个 Map<String,String>传递至POST方法..我试过了

addrparams = new Map<String,String>();
addrparams.put("addressline1","clayton st");
addrparams.put("country","US");

当 jpql 查询尝试从映射中绑定(bind)缺少选项字段的值时,这会导致空指针异常。

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;
...
}

更新:堆栈跟踪是 here

发生nullptr异常的Account.java:207就是这一行

Address address = Address.find(query).bind("addressline1",addressline1).bind("addressline2",addressline2).bind("country", country).first();

最佳答案

您的查询有误。您错过了 where 子句中的别名和等号:

where a.addressline1 = :addressline1 ...

您构建 map 的方式也是错误的。您将“clayton st”作为addressline1,然后将其替换为空字符串。

如果这些更正不起作用,请编辑您的问题,粘贴异常的堆栈跟踪,并告诉我们代码中的哪一行抛出异常。

关于java - 测试可选字段值的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7606450/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com