我有一个 REST 服务器,它应该将纯文本输出作为流发送,但是当我使用 Postman 或 Chrome 进行 REST 调用时,我会在过程结束时立即获得整个输出,而不是获得流。
这是我的 REST 服务器,灵感来自这篇文章:
@GET
@Path("/stream-test")
@Produces(MediaType.TEXT_PLAIN)
public Response streamTest(){
StreamingOutput stream = new StreamingOutput() {
@Override
public void write(OutputStream os) throws IOException, WebApplicationException {
Writer writer = new BufferedWriter(new OutputStreamWriter(os));
for (int i=1; i<=10; i++) {
writer.write("output " + i + " \n");
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
writer.flush();
}
};
return Response.ok(stream).build();
}
Run Code Online (Sandbox Code Playgroud)
输出行全部同时显示。我希望每 500 毫秒看到一个输出。
我的实现有问题吗?
或者 Postman 和 Chrome 无法显示流输出? …
考虑这个代码:
import reactor.core.publisher.Mono;
public class Main {
public static void main(String[] args) {
Mono.just(1)
.map(Main::return_int) // is ok
// .map(Main::return_void) // is not ok
.subscribe();
}
private static void return_void(int input) {
// do stuff with input
}
private static int return_int(int input) {
return input;
}
}
Run Code Online (Sandbox Code Playgroud)
显然禁止Mono#map与空参数一起使用,我得到error: method map in class Mono<T> cannot be applied to given types; (...)
现在我如何return_void()在链中调用这个方法?
我应该使用其他运算符#map吗?或者除了包装return_void()到一个返回的方法之外别无选择Mono< Void>?
我的目标是复制此行为并将其包含在ngFor循环中。
我尝试了几种代码,每个代码都有不同的问题:
尝试1:
<table class="table">
<tbody>
<tr *ngFor="let game of games; let i = index" class="clickable-row" data-toggle="collapse" [attr.data-target]="'#gameDetails' + i">
<td class="text-nowrap">{{game.date}}
<div [attr.id]="'gameDetails' + i" class="collapse">
<p>Insert a large component in this place</p>
</div>
</td>
<td class="text-nowrap">{{game.label}}</td>
<td class="text-nowrap">{{game.score}}</td>
</tr>
</tbody>
</table>
Run Code Online (Sandbox Code Playgroud)
尝试1个结果,但已崩溃:
尝试1个结果,已部署:
在尝试1中,问题在于折叠的组件适合左侧单元格,从而影响了右侧单元格。
尝试2:
<table class="table">
<tbody>
<div *ngFor="let game of games; let i = index">
<tr class="clickable-row" data-toggle="collapse" [attr.data-target]="'#game2Details' + i">
<td class="text-nowrap">{{game.date}}</td>
<td class="text-nowrap">{{game.label}}</td>
<td class="text-nowrap">{{game.score}}</td>
</tr>
<tr [attr.id]="'game2Details' + i" class="collapse">
<td …Run Code Online (Sandbox Code Playgroud) 我在jar中定义了一个类MyFrontService,以下是我想要使用它的方法:
import blabla.MyFrontService;
public class Main {
public static void main(String[] args) {
MyFrontService.doThis();
}
}
Run Code Online (Sandbox Code Playgroud)
FrontService充当访问其他服务的入口点.以下是它当前的定义方式(并且有效).
MyFrontService.java:
public class MyFrontService {
public static void doThis(){
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("META-INF/springBeans.xml");
MyService1 myService1 = (MyService1) context.getBean("myService1");
myService1.doSomething();
context.close();
}
}
Run Code Online (Sandbox Code Playgroud)
MyService1.java:
package blabla.service;
@Service("myService1")
public class MyService1 {
public void doSomething(){
// some code
}
}
Run Code Online (Sandbox Code Playgroud)
SRC /主/资源/ META-INF/springBeans.xml:
(...)
<context:annotation-config />
<context:component-scan base-package="blabla.service" />
(...)
Run Code Online (Sandbox Code Playgroud)
我想通过以下方式替换MyFrontService.java的代码:
@MagicAnnotation("what_path?/springBeans.xml")
public class MyFrontService {
@Autowired
private static MyService1 myService1;
public static void …Run Code Online (Sandbox Code Playgroud) 我的目标是测试API调用,考虑延迟.我受到这篇文章的启发.
我设计了一个沙箱,其中模拟API需要1000毫秒来响应并更改全局变量的值result.测试在500毫秒后和1500毫秒后检查值.
这是最后一次测试失败的代码:
let result: number;
const mockAPICall = (delay: number): Observable<number> => {
console.log('API called');
return Observable.of(5).delay(delay);
};
beforeEach(() => {
console.log('before each');
});
it('time test', async(() => {
result = 0;
const delay = 1000;
console.log('start');
mockAPICall(delay).subscribe((apiResult: number) => {
console.log('obs done');
result = apiResult;
});
console.log('first check');
expect(result).toEqual(0);
setTimeout(() => {
console.log('second check');
expect(result).toEqual(0);
}, 500
);
setTimeout(() => {
console.log('third check');
expect(result).toEqual(0);
}, 1500
);
}));
Run Code Online (Sandbox Code Playgroud)
最后一次测试确实按预期失败了,我在日志中得到了这个:
before each
API called
first …Run Code Online (Sandbox Code Playgroud) 当我开始与合并请求相关联的讨论时,我希望在有人向讨论添加评论时收到通知。
当然,我想避免在Watch上设置通知级别,因为它也会向我发送我不感兴趣的活动的垃圾邮件。
有可能还是缺少功能?
由于什么原因,此代码会失败(未找到元素)...
element(by.id('loginButton')).click(); // triggers route change
browser.wait(element(by.tagName('myComponent')).isPresent(), 10000, 'timeout');
element(by.tagName('myComponent')).click();
Run Code Online (Sandbox Code Playgroud)
...虽然这段代码有效?
element(by.id('loginButton')).click(); // triggers route change
const eC = protractor.ExpectedConditions;
browser.wait(eC.visibilityOf(element(by.tagName('myComponent'))), 10000, 'timeout');
element(by.tagName('myComponent')).click();
Run Code Online (Sandbox Code Playgroud)
我正在使用 Angular 5.2.5、Protractor 5.3.0 和 Jasmine 2.8.0。
可能是相关的:我也可以问为什么我需要添加一段browser.wait()时间element(by())应该由量角器自动添加到 ControlFlow 中,但是已经有很多相关问题(这里,这里,那里,那里,...),不幸的是没有明确的答案。
考虑这段代码:
Mono.just(myVar)
.flatMap(MyClass::heavyOperation)
.flatMap(MyClass::anotherHeavyOperation)
.flatMap(res -> doSomething(res, MyClass.heavyOperation(myVar)));
Run Code Online (Sandbox Code Playgroud)
MyClass.heavyOperation(myVar)为了性能,我不想使用相同的输入调用两次。
如何在第四次操作中重用第二次操作的结果?
我想做这样的事情,这是被禁止的:
Object myObj;
Mono.just(myVar)
.flatMap(var -> {
myObj = MyClass.heavyOperation(var);
return myObj;
})
.flatMap(MyClass::anotherHeavyOperation)
.flatMap(res -> doSomething(res, myObj));
Run Code Online (Sandbox Code Playgroud) 问题也可能是"为什么在git pull存在时使用git fetch?".
执行a的原因git fetch可能是您希望在运行之前查看fetch命令的日志以了解您将要合并的内容git merge.
git fetch那么git merge作为经典的工作流程,git fetch如果你以前没有运行过这个命令,你还有其他常见的东西吗?
例如。我需要设计一个具有两个功能的 API:付款验证和付款创建。我需要两者,因为最终用户应该在实际确认付款创建之前知道一切正常。为了创造,我有
POST .../payment
Run Code Online (Sandbox Code Playgroud)
带有输入体。如果出现问题,它会返回 HTTP 400。
验证(或模拟)执行与创建完全相同的过程,在保存数据之前停止该过程。对于这个验证,最好有类似的东西
解决方案1
GET .../is-payment-ok
Run Code Online (Sandbox Code Playgroud)
还有一个输入体。它返回 HTTP 200,包括一个布尔值答案和一些细节。
这里的资源不是付款,而是关于付款有效性的信息,这对我来说似乎是 REST 兼容的。缺点是 API 的用户可能会感到困惑,因为如果付款无效,那么模拟将返回 HTTP 200(主体中的布尔值设置为false),而创建将返回 HTTP 400。
, 或者
解决方案2
POST .../payment?simulation=true , or
POST .../payment-simulation
Run Code Online (Sandbox Code Playgroud)
这里的 HTTP 响应代码与支付创建完全相同。缺点是我们使用 POST,实际上没有“发布”任何资源。
你会怎么做?这种情况下是否有 REST 规则或惯例?
关注这篇文章之后:
\n\n\nopenjdk 11 原生支持 jfr
\n
OpenJDK 11 的功能列表也证实了这一点:
\n\n\n328:飞行记录器
\n
然而,从这篇 DZone 文章中,关于使用 JFR 链接选项-XX:+UnlockCommercialFeatures:
\n\nOpenJDK 无法识别此选项\xe2\x80\x99
\n
当我尝试找前任时。与摇篮:./gradlew clean -Dorg.gradle.jvmargs="-XX:+UnlockCommercialFeatures"我明白了
\n\n进程命令行:C:\\Program\nFiles\\AdoptOpenJDK\\jdk-11.0.11.9-hotspot\\bin\\java.exe\n-XX:+UnlockCommercialFeatures (...)
\n无法识别的 VM 选项“UnlockCommercialFeatures”
\n
我在这里缺少什么?
\njava ×4
angular ×3
rest ×2
asynchronous ×1
git ×1
gitlab ×1
html-table ×1
http-post ×1
jasmine ×1
java-8 ×1
javascript ×1
jfr ×1
openjdk-11 ×1
postman ×1
protractor ×1
spring ×1
stream ×1
webdriver ×1