我正在研究一个使用JIRA的REST Client的J2EE项目。该客户端返回一个Jira issue对象。一些领域的Issue阶级是key,self,id,summary,等等self领域在这里基本上是一个URI。
例如,http://jira.company.com/rest/api/2.0/issue/12345
我有一个用例,其中我必须从上面指定的URI中检索主机。
我可以用类似的方法做到这一点issue.getSelf().getHost()。
issue.getSelf()返回“ URI”类型的对象并获取主机,我可以简单地使用类getHost()提供的方法,URI该类以String格式返回主机URL 。
一切正常。我在使用Mockito进行这段代码的单元测试时遇到问题。我不知道如何模拟链接的方法调用。
我有以下代码片段。
private static final String JIRA_HOST = "jira.company.com";
@Mock private com.atlassian.jira.rest.client.api.domain.Issue mockIssue;
@Before
public void setup() {
when(mockIssue.getSelf().getHost()).thenReturn(JIRA_HOST);
}
Run Code Online (Sandbox Code Playgroud)
在这里,我得到一个Null Pointer Exception。
经过大量研究之后,我才知道必须使用@Mock(answer = Answers.RETURNS_DEEP_STUBS) private com.atlassian.jira.rest.client.api.domain.Issue mockIssue;。
但这也给我一个启示Null Pointer Exception。
有人可以告诉我如何模拟链接的方法调用。
我有下面的代码.
public static ModuleKey getDeployableModuleFromModulesList(List<Module> modules) {
ModuleKey deployableModuleKey = null;
for(Module module : modules) {
List<Artifact> artifacts = module.getArtifacts();
for(Artifact artifact : artifacts) {
if(artifact.getType().equals("ear")) {
return module.getKey();
} else if(!artifact.getType().equals("ear")) {
if(artifact.getType().equals("war")) {
deployableModuleKey = module.getKey();
}
}
}
}
return deployableModuleKey;
}
Run Code Online (Sandbox Code Playgroud)
此代码使用key ='war'找到第一个'deployableModuleKey',或者使用key ='war'找到最后一个'deployableModuleKey'.我想使用Java 8 Streams和Lambdas实现与上面相同的功能.
到目前为止,我所尝试的是:
modules.stream().flatMap(e -> e.getArtifacts().stream())
.filter(e -> e.getType().equals("ear")).findFirst()
.orElseGet(() -> modules.stream().flatMap(e -> e.getArtifacts().stream())
.filter(e -> e.getType().equals("war")).reduce((a, b) -> b).orElse(null));
Run Code Online (Sandbox Code Playgroud)
上面的代码片段将返回一个类型的对象Artifact而不是Module.我想获得工件与条件匹配的模块.一旦找到模块,我就可以通过这样做来返回密钥module.getKey().要做到这一点,我想知道我们如何引用父for循环的元素.
我不确定我的Java 8代码是否完全正确.
在这方面有人可以帮助我吗?
我有一个 Rest 端点类,如下所示:
@Path("/sports")
public interface SportsEndpoint {
@GET
List<Player> getPlayersOfSports(@QueryParam("sportId") String sportId, @QueryParam("sportName") String sportName);
@GET
List<Player> getPlayersOfSports(@QueryParam("sportId") String sportId, @QueryParam("sportName") String sportName, @QueryParam("country") String country);
}
Run Code Online (Sandbox Code Playgroud)
如您所见,我有两种GET方法几乎具有相同的签名,但第二种方法需要额外的QueryParam.
我尝试使用 url 访问这些端点:
http://localhost:8080/rest/api/sports?sportId=100&sportName=badminton
http://localhost:8080/rest/api/sports?sportId=100&sportName=badminton&country=japan
这两个 url 都解析为使用第一个方法签名。理想情况下,我期望对于第一个 url,将调用第一个方法签名,而对于第二个 url,将调用第二个方法(具有 3 个查询参数的方法)。
但看起来在这两种情况下,第一种方法都被调用了。
我知道 Rest 资源由路径而不是查询参数唯一标识。但是,即使查询参数的数量不同,其余端点也不会被唯一标识,这也是真的吗?
有人可以指出我在设计rest api端点时可以理解多态性的一些规范/文章/文档吗?
仅供参考:我正在使用 RestEasy。
我正在尝试使用Email :: Send :: SMTP :: Gmail编写一个简单的perl脚本来发送电子邮件.
以下是我到目前为止编写的脚本.
use strict;
use warnings;
use Email::Send::SMTP::Gmail;
my $mail=Email::Send::SMTP::Gmail->new( -smtp=>'smtp.gmail.com',
-login=>'abc@gmail.com',
-pass=>'12345',
-port=>587,
-verbose=>1,
-debug=>1);
$mail->send(-to=>'pqr@gmail.com', -subject=>'Hello!', -body=>'Just testing it', -verbose=>1, -debug=>1);
$mail->bye;
Run Code Online (Sandbox Code Playgroud)
这个脚本工作正常.如何将此电子邮件发送给多个人(即"收件人"字段中的多个电子邮件ID).我尝试过使用:
$mail->send(-to=>['pqr@gmail.com', 'xyz@gmail.com'], -subject=>'Hello!', -body=>'Just testing it', -verbose=>1, -debug=>1);
Run Code Online (Sandbox Code Playgroud)
但是我收到一个错误:
Net::SMTPS=GLOB(0x23b77a8)>>> RCPT TO:<ARRAY(0x1ee5e78)>
Net::SMTPS=GLOB(0x23b77a8)<<< 553 5.1.2 The address specified is not a valid RFC-5321 address. w78sm722980qka.25 - gsmtp
Run Code Online (Sandbox Code Playgroud)