我正在开发一个项目,将文件从JSON转换为YAML.我正在使用以下库的2.8.3版本:
我的YAML序列化代码非常简单:
ObjectMapper mapper = new ObjectMapper(new YAMLFactory());
ObjectWriter writer = mapper.writer();
try {
SequenceWriter sw = writer.writeValues(System.out);
sw.write(tree);
}
catch (IOException e) {
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
此代码生成的YAML如下所示:
serviceType: "elasticSearch"
displayName: "Elasticsearch Service"
description: "Sample Elastic Search Service"
Run Code Online (Sandbox Code Playgroud)
虽然它是有效的YAML,但我不喜欢围绕值的双引号.你不需要它们在YAML中,它使编辑结果文件更加麻烦.有谁知道如何配置ObjectWriter使jackson停止将String值封装在引号中?
我正在研究将YAML用于某种复杂的元数据语言.如果我们可以使用YAML的锚点和引用,这将有助于使文档更小,更简单.我写了一些测试代码,似乎表明Jackson的YAML实现不支持这个功能(和/或没有表现出SnakeYAML对此功能的支持).
这是我的测试YAML文件:
set_one:
bass: tama rockstar 22x16
snare: &ludwig ludwig supralight 6.5x15
tom1: tama rockstar 12x11
tom2: tama rockstar 16x16
set_two:
snare: *ludwig
Run Code Online (Sandbox Code Playgroud)
我正在解析这个文件:
ObjectMapper mapper = new ObjectMapper(new YAMLFactory());
FileInputStream fis = null;
try
{
fis = new FileInputStream(file);
JsonNode nodeTree = mapper.readTree(fis);
examineObject(nodeTree, 0);
}
...
Run Code Online (Sandbox Code Playgroud)
这是我的"examineObject()"方法(你可能猜到它的作用):
key = "set_one", type = OBJECT
key = "bass", type = STRING, value = "tama rockstar 22x16"
key = "snare", type = STRING, value = "ludwig supralight 6.5x15"
key …Run Code Online (Sandbox Code Playgroud) 我正在使用 Jetty 的 HttpClient 构建一个简单的代理服务器。我在 Java 1.8.0_45 上使用 Jetty 版本 9.3.10.v20160621。
我有一种情况,我对资源执行 GET 操作,该资源将返回大小约为 3.5M 的响应(我使用soapUI 确定了这一点)。知道 Jetty 的默认最大响应大小是 2M,我在创建 HttpClient 实例时执行以下操作。
HttpClient client = new HttpClient();
client.setResponseBufferSize(4194304);
client.start();
Run Code Online (Sandbox Code Playgroud)
后来我执行一个同步 GET 请求,如下所示:
System.out.println("response buffer size = " + client.getResponseBufferSize());
retVal = client.GET(uri);
Run Code Online (Sandbox Code Playgroud)
控制台日志有以下内容:
响应缓冲区大小 = 4194304
尽管如此,当我执行 GET() (下面的堆栈跟踪)时,我得到了一个 java.util.concurrent.ExecutionException 。我只能得出结论,要么 (a) setResponseBufferSize() 方法中存在错误,要么 (b) setResponseBufferSize() 方法不执行文档所说的操作(设置响应缓冲区大小)。有人知道这是怎么回事吗?
java.util.concurrent.ExecutionException: java.lang.IllegalArgumentException: Buffering capacity exceeded
at org.eclipse.jetty.client.util.FutureResponseListener.getResult(FutureResponseListener.java:118)
at org.eclipse.jetty.client.util.FutureResponseListener.get(FutureResponseListener.java:101)
at org.eclipse.jetty.client.HttpRequest.send(HttpRequest.java:652)
at org.eclipse.jetty.client.HttpClient.GET(HttpClient.java:343)
at oracle.paas.tools.sifter.proxy.ProxySession.get(ProxySession.java:106)
at oracle.paas.tools.sifter.proxy.Endpoint.doGet(Endpoint.java:75)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:687)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:837) …Run Code Online (Sandbox Code Playgroud) 我正在使用Bitnami Tomcat堆栈上的Java servlet 实现JSON补丁规范.在servlet端,我通过重写HttpServlet.service()方法来处理HTTP PATCH方法,如下所示:
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
if (request.getMethod().equals("PATCH"))
doPatch(request, response);
else
super.service(request, response);
}
Run Code Online (Sandbox Code Playgroud)
问题是,当我尝试向Tomcat发送HTTP PATCH请求时,Apache httpd使用501"Method Not Implemented"拒绝它.
有没有办法让Apache httpd停止这样做?