Wildfly 10 管理休息 API
Wildfly 10 management Rest API
有人可以解释下面的代码吗?
我知道 RESTEasy 客户端和 Jersey AuthenticationFeature...但这意味着 SimpleOperation class 以及它是什么 API?
HttpAuthenticationFeature feature = HttpAuthenticationFeature.digest("admin", "admin");
Client client = ClientBuilder.newClient();
client.register(feature);
Entity<SimpleOperation> operation = Entity.entity(
new SimpleOperation("read-resource", true, "subsystem", "undertow", "server", "default-server"),
MediaType.APPLICATION_JSON_TYPE);
WebTarget managementResource = client.target("http://localhost:9990/management");
String response = managementResource.request(MediaType.APPLICATION_JSON_TYPE)
.header("Content-type", MediaType.APPLICATION_JSON)
.post(operation, String.class);
System.out.println(response);
来自:https://docs.jboss.org/author/display/WFLY10/The+HTTP+management+API
如果您找不到 SimpleOperation
class 是什么,或者它只是为文档编造的 class,您可以自己创建一个。它只是一个简单的 POJO,JSON 序列化程序使用它来序列化到 JSON。如果您不熟悉 JSON/POJO 映射,这里有一些提示
JSON 对象(通常)映射到 Java POJO classes。所以 { }
会映射到
class SomeClass
JSON 属性映射到 Java bean 属性。例如,如果您有一个 JSON 属性 firstName
,那么您将需要一个带有 getter 和 setter 的字段,以及 getter 和 setter 匹配 JSON 属性 的名称(带 get/set 前缀且首字母大写)
class SomeClass {
private String firstName;
public String getFirstName() { return firstName; }
public void setFirstName(String firstName) { this.firstName = firstName }
}
因此,如果您要将 new SomeClass("Joao")
作为实体发送,它将序列化为
{"firstName": "Joao"}
也就是说,如果您知道需要发送的 JSON 格式,那么创建您自己的 POJO 应该不会太难。
一些其他类型的映射:
JSON数组一般映射到List
。所以如果你有 ["hello", "world"]
,你可以将它映射到 List<String>
。
或者如果你有一个 JSON 数组 JSON 对象,例如 [{"prop":"value"}, {"prop":"value"}]
,你可以将它映射到 List<SomeType>
Boolean java 属性 getters 可以遵循更广泛的命名约定,即 getProperty
, isProperty
, hasProperty
这就是我能想到的基本知识。例如,查看您提供的 link 的示例请求之一
{
"operation":"read-resource",
"include-runtime":"true",
"recursive":"true",
"address":["subsystem","undertow","server","default-server"]
}
您可以将其映射到 POJO,例如
public class SimpleOperation {
private String operation;
@JsonProperty("include-runtime")
private boolean includeRuntime;
public boolean recursive;
private List<String> address;
public SimpleOperation(String operation, boolean includeRuntime,
boolean recursive, String... address) {
this.operation = operation;
this.includeRuntime = includeRuntime;
this.address = Arrays.asList(address);
}
// getters and setters.
}
@JsonProperty
是为了让 Jackson 序列化程序知道如何设置 JSON 属性 名称。它将默认脱离我上面提到的命名约定,但它不知道在名称中使用 -
,因此我们明确告诉它 属性 名称应该是什么。
那么你可以
new SimpleOperation("read-resource", true, "subsystem", "undertow", "server", "default-server")
并且应该序列化为上面的JSON
有人可以解释下面的代码吗?
我知道 RESTEasy 客户端和 Jersey AuthenticationFeature...但这意味着 SimpleOperation class 以及它是什么 API?
HttpAuthenticationFeature feature = HttpAuthenticationFeature.digest("admin", "admin");
Client client = ClientBuilder.newClient();
client.register(feature);
Entity<SimpleOperation> operation = Entity.entity(
new SimpleOperation("read-resource", true, "subsystem", "undertow", "server", "default-server"),
MediaType.APPLICATION_JSON_TYPE);
WebTarget managementResource = client.target("http://localhost:9990/management");
String response = managementResource.request(MediaType.APPLICATION_JSON_TYPE)
.header("Content-type", MediaType.APPLICATION_JSON)
.post(operation, String.class);
System.out.println(response);
来自:https://docs.jboss.org/author/display/WFLY10/The+HTTP+management+API
如果您找不到 SimpleOperation
class 是什么,或者它只是为文档编造的 class,您可以自己创建一个。它只是一个简单的 POJO,JSON 序列化程序使用它来序列化到 JSON。如果您不熟悉 JSON/POJO 映射,这里有一些提示
JSON 对象(通常)映射到 Java POJO classes。所以
{ }
会映射到class SomeClass
JSON 属性映射到 Java bean 属性。例如,如果您有一个 JSON 属性
firstName
,那么您将需要一个带有 getter 和 setter 的字段,以及 getter 和 setter 匹配 JSON 属性 的名称(带 get/set 前缀且首字母大写)class SomeClass { private String firstName; public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName } }
因此,如果您要将
new SomeClass("Joao")
作为实体发送,它将序列化为{"firstName": "Joao"}
也就是说,如果您知道需要发送的 JSON 格式,那么创建您自己的 POJO 应该不会太难。
一些其他类型的映射:
JSON数组一般映射到
List
。所以如果你有["hello", "world"]
,你可以将它映射到List<String>
。或者如果你有一个 JSON 数组 JSON 对象,例如
[{"prop":"value"}, {"prop":"value"}]
,你可以将它映射到List<SomeType>
Boolean java 属性 getters 可以遵循更广泛的命名约定,即
getProperty
,isProperty
,hasProperty
这就是我能想到的基本知识。例如,查看您提供的 link 的示例请求之一
{
"operation":"read-resource",
"include-runtime":"true",
"recursive":"true",
"address":["subsystem","undertow","server","default-server"]
}
您可以将其映射到 POJO,例如
public class SimpleOperation {
private String operation;
@JsonProperty("include-runtime")
private boolean includeRuntime;
public boolean recursive;
private List<String> address;
public SimpleOperation(String operation, boolean includeRuntime,
boolean recursive, String... address) {
this.operation = operation;
this.includeRuntime = includeRuntime;
this.address = Arrays.asList(address);
}
// getters and setters.
}
@JsonProperty
是为了让 Jackson 序列化程序知道如何设置 JSON 属性 名称。它将默认脱离我上面提到的命名约定,但它不知道在名称中使用 -
,因此我们明确告诉它 属性 名称应该是什么。
那么你可以
new SimpleOperation("read-resource", true, "subsystem", "undertow", "server", "default-server")
并且应该序列化为上面的JSON