这是我的代码:
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("http://127.0.0.1:8081/"))
.header("Host", "test.example.com")
.build();
client.send(request, HttpResponse.BodyHandlers.ofString());
Run Code Online (Sandbox Code Playgroud)
结果我看到上面的代码发送:
GET / HTTP/1.1
Connection: Upgrade, HTTP2-Settings
Content-Length: 0
Host: 127.0.0.1:8081
HTTP2-Settings: AAEAAEAAAAIAAAABAAMAAABkAAQBAAAAAAUAAEAA
Upgrade: h2c
User-Agent: Java-http-client/10
Host: test.example.com
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,它会发送两个Host标头(URI和我指定的Host标头),但我希望它发送我指定的标头,而不是URI中的标头.这个客户有可能吗?
编辑:在Java 11中,它变得更糟(你需要将client.send行改为:)client.send(request, HttpResponse.BodyHandlers.ofString());:
java.lang.IllegalArgumentException: restricted header name: "Host"
Run Code Online (Sandbox Code Playgroud)
如何自定义该标头(测试虚拟主机所需)?
我也试过setHeader并得到完全相同的问题(双头Host或异常).
编辑:我报告了一个JDK错误.
我有一个用 Java 11 编写的简单应用程序。mvn clean verify(maven 3.6.0)执行时出错:
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project parser: Compilation failure
[ERROR] ...src/main/java/module-info.java:[2,32] module not found: org.apache.logging.log4j
Run Code Online (Sandbox Code Playgroud)
依赖项:
<log4j.version>2.11.1</log4j.version>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>${log4j.version}</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>${log4j.version}</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
模块信息.java:
module abc {
requires org.apache.logging.log4j;
}
Run Code Online (Sandbox Code Playgroud)
Log4j2 配置是默认的并且在 .xml 文件中。用法:
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
private static final Logger logger = LogManager.getLogger(Abc.class);
logger.info("Boom!");
Run Code Online (Sandbox Code Playgroud)
我在 stackoverflow 上尝试了所有相关问题,但没有成功。
我正在将项目从Java 8迁移到Java 11,并且java 9中引入的模块化让我头疼.情侣罐有相同的包,但不同的类.这给了我错误
module SomeModule reads package my.package from both ModuleA and ModuleB
Run Code Online (Sandbox Code Playgroud)
我想知道如何处理这样的情况,因为并非所有的罐子都在我的控制之下,重构不是解决方案.
以下java 11代码:
HttpRequest request = HttpRequest.newBuilder()
.uri(uri)
.header("Digest", digest)
.header("Date", date)
.build();
Run Code Online (Sandbox Code Playgroud)
给出以下错误:
Exception in thread "main" java.lang.IllegalArgumentException: restricted header name: "Date"
Run Code Online (Sandbox Code Playgroud)
问题是摘要是基于日期的,所以我不能简单地依赖于http客户端日期,因为这会使摘要无效.我需要一种方法来设置Date标头,或者检索Date标头,然后设置摘要.标准java 11似乎都不可能.
我正在尝试使用SOAP创建一条简单的消息:
MessageFactory mf = MessageFactory.newInstance();
SOAPMessage message = mf.createMessage();
Run Code Online (Sandbox Code Playgroud)
当我使用Java 8构建项目时,可以,但是使用Java 11构建项目失败,并出现编译错误:
package javax.xml.soap does not exist
Run Code Online (Sandbox Code Playgroud)
如何解决此问题?
有没有办法让Java类公开但只公开一个JAR文件?AKA,它不是私有包,而是公共包,但它不是公共JAR?
说我有这样的结构:
project/
package1/
One.java
package2/
Two.java
package3/
Three.java
Run Code Online (Sandbox Code Playgroud)
由于3 .java文件在不同的包中,我需要公开.但有没有办法让它们只对包含该项目的JAR公开?这样如果另一个项目导入JAR,它就看不到某些公共类/字段?
当我使用OpenJDK 11(在Windows 10上为Zulu发行版)编译并运行以下非常简单的Java程序时:
public class GCTest {
public static void main(String[] args) {
System.out.println("Free memory before garbage collection: " + Runtime.getRuntime().freeMemory());
Runtime.getRuntime().gc();
System.out.println("Free memory after garbage collection: " + Runtime.getRuntime().freeMemory());
}
}
Run Code Online (Sandbox Code Playgroud)
看起来垃圾回收正在减少可用内存量:
Free memory before garbage collection: 266881496
Free memory after garbage collection: 7772200
Run Code Online (Sandbox Code Playgroud)
当我使用Oracle Java 8运行它时,不会发生这种情况:
Free memory before garbage collection: 254741016
Free memory after garbage collection: 255795064
Run Code Online (Sandbox Code Playgroud)
这是为什么?
我正在学习 Bryan Hansen 的 PluralSight 课程“Spring 框架:Spring 基础知识”。我完全按照演示进行操作(我相信),但收到错误消息“错误:java:不再支持源选项 5。使用 6 或更高版本。”。
我正在使用最新版本的 IntelliJ,具有以下配置:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>11</source>
<target>11</target>
</configuration>
</plugin>
</plugins>
</build>
Run Code Online (Sandbox Code Playgroud)
我看过其他一些类似的帖子,他们有时似乎将上述配置设置为 1.6 而不是 11,但我正在尝试密切关注本教程。我仍然对这里的差异感到好奇。
不确定是什么导致抛出此错误,据我所知,我已经正确设置了所有内容,但显然情况并非如此。任何帮助,将不胜感激。
从 Gradle 6.7.1 升级到 Gradle 7.4 后,出现以下错误:
FAILURE: Build failed with an exception.
* What went wrong:
Could not determine the dependencies of task ':example-project:compileJava'.
> Failed to query the value of extension 'example-extension' property 'enabled'.
> Failed to calculate the value of task ':example-project:compileJava' property 'javaCompiler'.
> No compatible toolchains found for request filter: {languageVersion=11, vendor=any, implementation=vendor-specific} (auto-detect true, auto-download false)
Run Code Online (Sandbox Code Playgroud) java ×10
java-11 ×10
maven ×3
java-module ×2
azul-zulu ×1
bouncycastle ×1
cryptography ×1
gradle ×1
http ×1
http2 ×1
java-10 ×1
java-9 ×1
java-platform-module-system ×1
jax-ws ×1
log4j2 ×1
spring ×1