提交 ce05a9f9 编写于 作者: W wizardforcel

2020-06-14 17:41:19

上级 fa49da5e
......@@ -6,7 +6,7 @@
Gson 可以处理任意 Java 对象,包括我们没有源代码的现有对象。
Gson 的最佳**好处是**,在我们为某些成员字段进行非常特定的操作之前,不必强制将注添加到 Java 类中。
Gson 的最佳**好处是**,在我们为某些成员字段进行非常特定的操作之前,不必强制将注添加到 Java 类中。
请注意,`Gson`实例在调用 Json 操作时不会保持任何状态。 因此,您可以自由地将同一对象重用于多个 Json 序列化和反序列化操作。
......
......@@ -214,7 +214,7 @@ public void destroy() {
## 使用`@WebServlet`注解开发 Servlet
如果您不太喜欢 xml 配置,而是特别喜欢注释,那么 Servlets API 也可以。 您可以使用[`@WebServlet`](https://docs.oracle.com/javaee/6/api/javax/servlet/annotation/WebServlet.html "WebServlet")注释,如下例所示,然后您无需在`web.xml`中进行任何输入。 **容器将自动将您的 servlet 注册到运行时,并像往常一样处理它**
如果您不太喜欢 xml 配置,而是特别喜欢注解,那么 Servlets API 也可以。 您可以使用[`@WebServlet`](https://docs.oracle.com/javaee/6/api/javax/servlet/annotation/WebServlet.html "WebServlet")注解,如下例所示,然后您无需在`web.xml`中进行任何输入。 **容器将自动将您的 servlet 注册到运行时,并像往常一样处理它**
```java
package com.howtodoinjava.servlets;
......@@ -459,7 +459,7 @@ Web 过滤器对于预处理请求和访问给定 URL 时调用某些功能很
```
如果要使用注释为特定的 servlet 配置过滤器,则可以使用`@WebFilter`注释
如果要使用注解为特定的 servlet 配置过滤器,则可以使用`@WebFilter`注解
## 使用 Servlet 下载二进制文件
......
......@@ -2,7 +2,7 @@
> 原文: [https://howtodoinjava.com/struts2/struts-2-hello-world-with-annotations/](https://howtodoinjava.com/struts2/struts-2-hello-world-with-annotations/)
在我以前的文章中,我写了许多关于 [**JAX-RS RESTEasy**](//howtodoinjava.com/restful-web-service/ "resteasy tutorials")[**Spring3**](//howtodoinjava.com "Spring3 tutorials")**Hibernate** 和其他 Java 框架,例如 [**Maven**](//howtodoinjava.com/maven/ "maven tutorials")[**junit**](//howtodoinjava.com/junit/ "junit tutorials") 的示例和教程。 我还写了与 [**Struts2 helloworld 和 xml 配置**](//howtodoinjava.com/struts-2/struts-2-hello-world-example-application/ "Struts2 hello world example application") 相关的帖子。 在本文中,我将更新先前的示例,以使用注来配置 Struts2 应用。
在我以前的文章中,我写了许多关于 [**JAX-RS RESTEasy**](//howtodoinjava.com/restful-web-service/ "resteasy tutorials")[**Spring3**](//howtodoinjava.com "Spring3 tutorials")**Hibernate** 和其他 Java 框架,例如 [**Maven**](//howtodoinjava.com/maven/ "maven tutorials")[**junit**](//howtodoinjava.com/junit/ "junit tutorials") 的示例和教程。 我还写了与 [**Struts2 helloworld 和 xml 配置**](//howtodoinjava.com/struts-2/struts-2-hello-world-example-application/ "Struts2 hello world example application") 相关的帖子。 在本文中,我将更新先前的示例,以使用注来配置 Struts2 应用。
有关信息,struts 注解是 [**struts 常规插件**](https://struts.apache.org/docs/convention-plugin.html "Struts2 convention plugin")的一部分。
......@@ -54,7 +54,7 @@ mvn eclipse:eclipse -Dwtpversion=2.0
需要以某种方式将 Struts 插入您的 Web 应用。 这意味着应将对应用的传入请求移交给 strut 进行处理。 这是通过在`web.xml`文件中添加过滤器定义来完成的。 此筛选器实质上将所有传入请求重定向到 `StrutsPrepareAndExecuteFilter`,然后使用配置来处理该请求。
另外,我传递了“`actionPackages`”初始化参数,以便可以扫描此包以查找必需的带注的类。
另外,我传递了“`actionPackages`”初始化参数,以便可以扫描此包以查找必需的带注的类。
```java
<!DOCTYPE web-app PUBLIC
......
......@@ -2,7 +2,7 @@
> 原文: [https://howtodoinjava.com/struts2/struts-2-custom-interceptor-with-interceptorref-example/](https://howtodoinjava.com/struts2/struts-2-custom-interceptor-with-interceptorref-example/)
在以前的帖子中,我们了解了 [helloworld 应用](//howtodoinjava.com/struts-2/struts-2-hello-world-with-annotations/ "Struts2 hello world with annotations")[设置 Struts2 应用](//howtodoinjava.com/struts-2/how-to-correctly-set-result-path-in-struts-2/ "How to correctly set result path in Struts2")的结果路径。 现在,在这篇文章中,我将举一个使用注的自定义或用户定义的拦截器配置示例。
在以前的帖子中,我们了解了 [helloworld 应用](//howtodoinjava.com/struts-2/struts-2-hello-world-with-annotations/ "Struts2 hello world with annotations")[设置 Struts2 应用](//howtodoinjava.com/struts-2/how-to-correctly-set-result-path-in-struts-2/ "How to correctly set result path in Struts2")的结果路径。 现在,在这篇文章中,我将举一个使用注的自定义或用户定义的拦截器配置示例。
拦截器是一个类,其每次访问已配置的服务器资源时都会调用其预定义方法。 这可以在资源访问之前或之后访问。 请注意,此处的资源访问也意味着 HTTP 请求处理。
......
......@@ -28,7 +28,7 @@ Gson gson = new GsonBuilder()
[`FieldNamingPolicy`](https://static.javadoc.io/com.google.code.gson/gson/2.8.5/com/google/gson/FieldNamingPolicy.html) 枚举在序列化期间为 JSON 字段名称提供了几种标准命名约定。 它有助于`Gson`实例将 Java 字段名称正确转换为所需的 JSON 字段名称。
*注意:请注意,以下任何命名约定均不会影响用`@SerializedName`注的字段。*
*注意:请注意,以下任何命名约定均不会影响用`@SerializedName`注的字段。*
以下命名选项可用。 我们将验证使用`User`类的每个策略生成的名称。 为了示例目的,我们以不同的模式添加了字段名称,以便我们可以了解每种命名策略如何在不同策略下转换不同的名称。
......@@ -175,7 +175,7 @@ System.out.println(gson.toJson(employeeObj));
相同的规则应用于`shouldSkipField(attribute)`方法。
在下面的示例中,将从序列化和反序列化中排除带有`@NPI`和所有`Account`类实例的 Gson 成员字段。
在下面的示例中,将从序列化和反序列化中排除带有`@NPI`和所有`Account`类实例的 Gson 成员字段。
```java
Gson gson = new GsonBuilder()
......
......@@ -2,7 +2,7 @@
> 原文: [https://howtodoinjava.com/struts2/solved-unable-to-find-interceptor-class-referenced-by-ref-name/](https://howtodoinjava.com/struts2/solved-unable-to-find-interceptor-class-referenced-by-ref-name/)
在为[**`@InterceptorRef`示例**](//howtodoinjava.com/struts-2/struts-2-custom-interceptor-with-interceptorref-example/ "Struts2 custom interceptor with @InterceptorRef example")编写代码时,我才知道此功能。 我必须在`struts.xml`文件中声明拦截器定义,而我想通过注使用拦截器。 第一次尝试时,失败并显示以下错误:
在为[**`@InterceptorRef`示例**](//howtodoinjava.com/struts-2/struts-2-custom-interceptor-with-interceptorref-example/ "Struts2 custom interceptor with @InterceptorRef example")编写代码时,我才知道此功能。 我必须在`struts.xml`文件中声明拦截器定义,而我想通过注使用拦截器。 第一次尝试时,失败并显示以下错误:
```java
Unable to load configuration. - [unknown location]
......
......@@ -87,6 +87,6 @@ public void howToDoInJava_method2()
现在,编译器确定它根本无法到达最后一个打印语句,因此`'javac'`再次报告了第二种方法的不可达代码。
如果您仍然对 Java 中的**无效代码**有疑问,请在注释部分写下。 我将尝试解决您的查询。
如果您仍然对 Java 中的**无效代码**有疑问,请在评论部分写下。 我将尝试解决您的查询。
学习愉快!
\ No newline at end of file
......@@ -4,11 +4,11 @@
随着应用随时间变化,模型类也会随之变化。 有时这些变化可能会打破例如,添加/删除字段等
所有此类更改都可以使用`@Since`进行标记,以跟踪模型类,以便在这些系统使用反序列化 JSON 数据进行交谈时,与其他系统的应用集成不会中断。
所有此类更改都可以使用`@Since`进行标记,以跟踪模型类,以便在这些系统使用反序列化 JSON 数据进行交谈时,与其他系统的应用集成不会中断。
## 1\. Gson `@Since`注解
[Gson](https://howtodoinjava.com/learningpaths/gson/) 中,可以通过使用`@Since`释来维护同一对象的多个版本。 可以在类,字段以及将来的方法中使用此注释。 它采用单个参数 – `ignoreVersionsAfter`
[Gson](https://howtodoinjava.com/learningpaths/gson/) 中,可以通过使用`@Since`解来维护同一对象的多个版本。 可以在类,字段以及将来的方法中使用此注解。 它采用单个参数 – `ignoreVersionsAfter`
当我们用版本号`'M.N'`配置`Gson`实例时,所有标记有**版本大于`M.N`的类字段将被忽略**
......@@ -24,7 +24,7 @@ private String email;
让我们创建并运行一个示例,以详细了解 Gson 中的版本控制支持。
#### 2.1 如何使用`@Since`注编写版本化的类
#### 2.1 如何使用`@Since`注编写版本化的类
`Employee`类下面,我们对三个字段进行了版本控制,即`firstName``lastName``email`
......@@ -115,6 +115,6 @@ Employee [id=1001, firstName=Lokesh, lastName=Gupta, email=null]
观察输出。 即使 JSON 字符串具有`email`字段,也没有反序列化。
请来回答有关**使用[`@Since`](https://static.javadoc.io/com.google.code.gson/gson/2.8.5/com/google/gson/annotations/Since.html)注的 Gson 版本支持的问题**
请来回答有关**使用[`@Since`](https://static.javadoc.io/com.google.code.gson/gson/2.8.5/com/google/gson/annotations/Since.html)注的 Gson 版本支持的问题**
学习愉快!
\ No newline at end of file
......@@ -251,7 +251,7 @@ Java 中的对象**克隆**并非易事。 我自己花了很长时间了解 Jav
* Spring Bean 范围有哪些不同?
* 在 Spring 框架中,单例 bean 线程安全吗?
* 解释 Bean 自动装配的不同模式?
* 用示例解释`@Qualifier`
* 用示例解释`@Qualifier`
* 构造器注入和设置器注入之间的区别?
* 命名 Spring 框架中使用的一些设计模式?
......
......@@ -8,11 +8,11 @@
默认情况下,我们假设 Java 模型类和 JSON 将具有完全相同的字段名称。 但有时情况并非如此,某些名称有所不同。 现在我们必须将 json 中的`someName`映射到 Java 类中的`someOtherName`。 这是[`@SerializedName`](https://static.javadoc.io/com.google.code.gson/gson/2.8.5/com/google/gson/annotations/SerializedName.html)注解提供帮助的地方。
`@SerializedName`注解指示应将带注释的成员序列化为 JSON,并使用提供的名称值作为其字段名称。 此注释将覆盖可能已经使用`GsonBuilder`类的所有[`FieldNamingPolicy`](https://static.javadoc.io/com.google.code.gson/gson/2.8.5/com/google/gson/FieldNamingPolicy.html),包括默认字段命名策略。
`@SerializedName`注解指示应将带注解的成员序列化为 JSON,并使用提供的名称值作为其字段名称。 此注解将覆盖可能已经使用`GsonBuilder`类的所有[`FieldNamingPolicy`](https://static.javadoc.io/com.google.code.gson/gson/2.8.5/com/google/gson/FieldNamingPolicy.html),包括默认字段命名策略。
请注意,您在此注解中指定的值必须是有效的 JSON 字段名称。
#### 1.1 注属性
#### 1.1 注属性
它接受两个属性:
......
......@@ -8,7 +8,7 @@
[`@Expose`](https://static.javadoc.io/com.google.code.gson/gson/2.8.5/com/google/gson/annotations/Expose.html)标记要排除的对象的某些字段,默认为*标记为*,以考虑将序列化和反序列化为 JSON。 这意味着 Gson 将排除类中没有用`@Expose`注解标记的所有字段。
`@Expose`在一种编程风格中很有用,在该编程风格中,您要显式指定应考虑进行序列化或反序列化的所有字段。
`@Expose`在一种编程风格中很有用,在该编程风格中,您要显式指定应考虑进行序列化或反序列化的所有字段。
#### 1.1 如何使用`@Expose`
......@@ -30,7 +30,7 @@ private String emailAddress;
如果我们使用`new Gson()`创建 Gson 并执行`toJson()``fromJson()`方法,则`@Expose`将不会对序列化和反序列化产生任何影响。
要使用此注,我们必须使用[`GsonBuilder`](https://howtodoinjava.com/gson/gson-gsonbuilder-configuration/)类及其`excludeFieldsWithoutExposeAnnotation()`方法创建`Gson`实例。
要使用此注,我们必须使用[`GsonBuilder`](https://howtodoinjava.com/gson/gson-gsonbuilder-configuration/)类及其`excludeFieldsWithoutExposeAnnotation()`方法创建`Gson`实例。
```java
Gson gson = new GsonBuilder()
......@@ -86,7 +86,7 @@ Gson gson = new GsonBuilder()
* 对于**序列化**,如果`shouldSkipClass(Class)``shouldSkipField(fieldAttributes)`方法返回`true`,则该类或字段类型将不属于 JSON。 输出。
* 对于**反序列化**,如果`shouldSkipClass(Class)``shouldSkipField(fieldAttributes)`方法返回`true`,则不会将其设置为 Java 对象结构的一部分 。
例如,在`ExclusionStrategy`定义下方将排除所有带有`@Hidden`的字段。
例如,在`ExclusionStrategy`定义下方将排除所有带有`@Hidden`的字段。
```java
//public @interface Hidden {
......
......@@ -4,7 +4,7 @@
[**Gson**](https://sites.google.com/site/gson/ "google gson")(由 Google 提供)是可用于*将 Java 对象转换为 JSON 字符串*的 Java 库。 此外,它还可以用于*将 JSON 字符串转换为等效的 Java 对象*
还有其他一些 Java 库也可以执行此转换,但是 Gson 处于极少数情况,不需要任何预先注的 Java 类或 Java 类的源代码。
还有其他一些 Java 库也可以执行此转换,但是 Gson 处于极少数情况,不需要任何预先注的 Java 类或 Java 类的源代码。
**Gson** 还支持旧的 Java 类,这些类中不支持泛型来提供类型信息。 它只是与这些旧式类一起正常工作。
......@@ -362,7 +362,7 @@ String jsonOutput = gson.toJson(employee);
## 8\. Gson `setVersion()` - 版本支持
如果您正在使用的类文件已在不同版本中进行了修改,并且使用[`@Since`](https://code.google.com/p/google-gson/source/browse/trunk/gson/src/main/java/com/google/gson/annotations/Since.java "since")了字段,则可以使用此功能。 您需要做的就是使用`GsonBuilder``setVersion()`方法。
如果您正在使用的类文件已在不同版本中进行了修改,并且使用[`@Since`](https://code.google.com/p/google-gson/source/browse/trunk/gson/src/main/java/com/google/gson/annotations/Since.java "since")了字段,则可以使用此功能。 您需要做的就是使用`GsonBuilder``setVersion()`方法。
```java
GsonBuilder gsonBuilder = new GsonBuilder();
......@@ -432,7 +432,7 @@ Output:
3. [Gson – 序列化和反序列化映射](https://howtodoinjava.com/java/serialization/gson-serialize-deserialize-hashmap/)
4. [Gson – 序列化和反序列化集合](https://howtodoinjava.com/library/gson-serialize-deserialize-set/)
5. [Gson – 序列化和反序列化数组](https://howtodoinjava.com/library/gson-parse-json-array/)
6. [Gson - `@SerializedName`注示例](https://howtodoinjava.com/library/gson-serializedname/)
6. [Gson - `@SerializedName`注示例](https://howtodoinjava.com/library/gson-serializedname/)
7. [Gson- Jersey + Gson 示例](https://howtodoinjava.com/jersey/jax-rs-gson-example/)
这就是这个非常有用的 java gson 库的全部内容,可以将**对象转换为 JSON** 。 如果您有任何疑问或反馈,请发表评论。
......
......@@ -4,7 +4,7 @@
详细了解 **JAXB 注解**及其在编组和解组操作期间的用法。
## 1)JAXB 注列表
## 1)JAXB 注列表
| 注解 | 范围 | 描述 |
| --- | --- | --- |
......@@ -49,10 +49,10 @@ public class Employee implements Serializable
它定义 JAXB 引擎用来包含到生成的 XML 中的 Java 类的字段或属性。 它有四个可能的值。
* `FIELD` – 绑定到 JAXB 的类中的每个非静态,非瞬态字段都将自动绑定到 XML,除非由`XmlTransient`
* `NONE` – 没有任何字段或属性绑定到 XML,除非使用某些 JAXB 注释专门对其进行注释
* `PROPERTY` – 绑定到 JAXB 的类中的每个获取器/设置器对将自动绑定到 XML,除非由`XmlTransient`
* `PUBLIC_MEMBER` – 每个公开获取/设置对和每个公开字段都将自动绑定到 XML,除非由`XmlTransient`
* `FIELD` – 绑定到 JAXB 的类中的每个非静态,非瞬态字段都将自动绑定到 XML,除非由`XmlTransient`
* `NONE` – 没有任何字段或属性绑定到 XML,除非使用某些 JAXB 注解专门对其进行注解
* `PROPERTY` – 绑定到 JAXB 的类中的每个获取器/设置器对将自动绑定到 XML,除非由`XmlTransient`
* `PUBLIC_MEMBER` – 每个公开获取/设置对和每个公开字段都将自动绑定到 XML,除非由`XmlTransient`
* 默认值为`PUBLIC_MEMBER`
```java
......@@ -197,7 +197,7 @@ public class Employee implements Serializable
防止将 JavaBean 属性/类型映射到 XML 表示形式。 当放置在一个类上时,它指示该类不应单独映射到 XML。 此类的属性将与其派生类一起映射到 XML,就好像该类是内联的一样。
`@XmlTransient`与所有其他 JAXB 定义的注互斥。
`@XmlTransient`与所有其他 JAXB 定义的注互斥。
```java
@XmlRootElement(name = "employee")
......
......@@ -6,9 +6,9 @@
## 1\. JAXB `@XmlRootElement`注解类型
`@XmlRootElement`将类或[枚举类型](https://howtodoinjava.com/java/enum/guide-for-understanding-enum-in-java/)映射到 XML 元素。 当使用`@XmlRootElement`注解注释顶级类或枚举类型时,则其值在 XML 文档中表示为 XML 元素。
`@XmlRootElement`将类或[枚举类型](https://howtodoinjava.com/java/enum/guide-for-understanding-enum-in-java/)映射到 XML 元素。 当使用`@XmlRootElement`注解来注解顶级类或枚举类型时,则其值在 XML 文档中表示为 XML 元素。
`@XmlRootElement`释可以与以下注释一起使用:`XmlType``XmlEnum``XmlAccessorType``XmlAccessorOrder`
`@XmlRootElement`解可以与以下注解一起使用:`XmlType``XmlEnum``XmlAccessorType``XmlAccessorOrder`
#### 1.1 语法
......
# JAXB `@XmlElementWrapper`注示例
# JAXB `@XmlElementWrapper`注示例
> 原文: [https://howtodoinjava.com/jaxb/xmlelementwrapper-annotation/](https://howtodoinjava.com/jaxb/xmlelementwrapper-annotation/)
**JAXB `@XmlElementWrapper`注**的 Java 示例及其在[编组](https://howtodoinjava.com/jaxb/marshaller-example/)[编组](https://howtodoinjava.com/jaxb/jaxb-unmarshaller-example/)操作期间的用法详细说明。
**JAXB `@XmlElementWrapper`注**的 Java 示例及其在[编组](https://howtodoinjava.com/jaxb/marshaller-example/)[编组](https://howtodoinjava.com/jaxb/jaxb-unmarshaller-example/)操作期间的用法详细说明。
## 1\. `@XmlElementWrapper`类型
1. 该注生成围绕 XML 表示的包装器元素。
1. 该注生成围绕 XML 表示的包装器元素。
2. 它主要用于在集合周围产生包装 XML 元素。
3. 该注释可以与以下注释一起使用:`XmlElement``XmlElements``XmlElementRef``XmlElementRefs``XmlJavaTypeAdapter`
4. `@XmlElementWrapper`可以与以下程序元素一起使用:
3. 该注解可以与以下注解一起使用:`XmlElement``XmlElements``XmlElementRef``XmlElementRefs``XmlJavaTypeAdapter`
4. `@XmlElementWrapper`可以与以下程序元素一起使用:
* JavaBean 属性
* 非静态,非瞬态字段
......
......@@ -76,7 +76,7 @@ jaxbMarshaller.setProperty("jaxb.formatted.output", Boolean.TRUE);
## 3.`Marshaller`回调方法
您可以通过 JAXB 注类中的**自定义编组操作**,例如 `Employee.java`。 您需要定义两个方法,这些方法将在编组程序处理该类之前和之后进行监听。 在这些方法中,您可以执行诸如设置额外字段之类的操作。
您可以通过 JAXB 注类中的**自定义编组操作**,例如 `Employee.java`。 您需要定义两个方法,这些方法将在编组程序处理该类之前和之后进行监听。 在这些方法中,您可以执行诸如设置额外字段之类的操作。
```java
package com.howtodoinjava.demo.model;
......
......@@ -64,7 +64,7 @@ Employee employee = (Employee) jaxbUnmarshaller.unmarshal( document );
## 3.解组事件回调
您可以通过在 [JAXB 注](https://howtodoinjava.com/jaxb/jaxb-annotations/)类中添加这些回调方法**来自定义解组操作**,例如`Employee.java`。 您需要定义两个方法,这些方法将在`Unmarshaller`处理该类之前和之后监听。
您可以通过在 [JAXB 注](https://howtodoinjava.com/jaxb/jaxb-annotations/)类中添加这些回调方法**来自定义解组操作**,例如`Employee.java`。 您需要定义两个方法,这些方法将在`Unmarshaller`处理该类之前和之后监听。
* `void beforeUnmarshal(Unmarshaller unmarshaller, Object parent) {}`
* `void afterUnmarshal(Unmarshaller unmarshaller, Object parent) {}`
......@@ -187,6 +187,6 @@ Employee [id=1, firstName=Lokesh, lastName=Gupta, department=Department [id=101,
```
向我提出您的有关使用 jaxb 注释在 Java 中解组的问题。
向我提出您的有关使用 JAXB 注解在 Java 中解组的问题。
学习愉快!
\ No newline at end of file
......@@ -2,7 +2,7 @@
> 原文: [https://howtodoinjava.com/jaxb/convert-json-to-java-object-moxy/](https://howtodoinjava.com/jaxb/convert-json-to-java-object-moxy/)
Java 示例**将 JSON 转换为 Java 对象**。 您可以将 **JSON 字符串解组到对象**或将 **JSON 文件解组到对象**。 此示例将 [MOXy](https://wiki.eclipse.org/EclipseLink/Examples/MOXy) 与 JAXB 一起使用,以将 JSON 解组到 Java 对象。 MOXy 实现 JAXB,使开发人员可以通过注提供其映射信息,并提供 JAXB 默认不提供的许多丰富功能。
Java 示例**将 JSON 转换为 Java 对象**。 您可以将 **JSON 字符串解组到对象**或将 **JSON 文件解组到对象**。 此示例将 [MOXy](https://wiki.eclipse.org/EclipseLink/Examples/MOXy) 与 JAXB 一起使用,以将 JSON 解组到 Java 对象。 MOXy 实现 JAXB,使开发人员可以通过注提供其映射信息,并提供 JAXB 默认不提供的许多丰富功能。
## 1\. MOXy 依赖
......@@ -19,7 +19,7 @@ Java 示例**将 JSON 转换为 Java 对象**。 您可以将 **JSON 字符串
## 2.将 JSON 文件转换为 Java 对象
#### 2.1 添加 JAXB 注
#### 2.1 添加 JAXB 注
```java
@XmlRootElement(name = "employee")
......@@ -65,7 +65,7 @@ public class Department implements Serializable {
当您获得`JAXBContext`的实例时,JAXB 将检查`jaxb.properties`文件并构造上下文。 在这里,您从 MOXy 库中注入了`JAXBContextFactory`
> 将`jaxb.properties`文件放在放置 JAXB 注类的同一包中。
> 将`jaxb.properties`文件放在放置 JAXB 注类的同一包中。
```java
javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory
......@@ -276,6 +276,6 @@ public class JaxbExample
> 阅读更多:[将 Java 对象转换为 XML](https://howtodoinjava.com/jaxb/write-object-to-xml/)
注释部分的 Java 示例中,向我发送您与编组和解组 json 有关的问题。
评论部分中,向我发送您与编组和解组 json 有关的问题。
学习愉快!
\ No newline at end of file
......@@ -2,7 +2,7 @@
> 原文: [https://howtodoinjava.com/jaxb/convert-object-to-json-moxy/](https://howtodoinjava.com/jaxb/convert-object-to-json-moxy/)
Java 示例**将 Java 对象转换为 JSON 字符串**或将 JSON 写入文件。 本示例将 [MOXy](https://wiki.eclipse.org/EclipseLink/Examples/MOXy) 与 JAXB 一起使用,以**将 Java 对象编组为 JSON**。 MOXy 实现 JAXB,使开发人员可以通过注提供其映射信息,并提供 JAXB 默认不提供的许多丰富功能。
Java 示例**将 Java 对象转换为 JSON 字符串**或将 JSON 写入文件。 本示例将 [MOXy](https://wiki.eclipse.org/EclipseLink/Examples/MOXy) 与 JAXB 一起使用,以**将 Java 对象编组为 JSON**。 MOXy 实现 JAXB,使开发人员可以通过注提供其映射信息,并提供 JAXB 默认不提供的许多丰富功能。
## 1\. MOXy 依赖
......@@ -19,7 +19,7 @@ Java 示例**将 Java 对象转换为 JSON 字符串**或将 JSON 写入文件
## 2\. Java 对象到 JSON 字符串
#### 2.1 添加 JAXB 注
#### 2.1 添加 JAXB 注
```java
@XmlRootElement(name = "employee")
......@@ -65,7 +65,7 @@ public class Department implements Serializable {
当您获得`JAXBContext`的实例时,JAXB 将检查`jaxb.properties`文件并构造上下文。 在这里,您从 MOXy 库中注入了`JAXBContextFactory`
> 将`jaxb.properties`文件放在放置 JAXB 注类的同一包中。
> 将`jaxb.properties`文件放在放置 JAXB 注类的同一包中。
```java
javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory
......@@ -211,6 +211,6 @@ public class JaxbExample
```
请在与该**相关的注释部分将我的问题转换为 json 示例**
请在评论部分将该 json 转换示例**相关的问题**发送给我
学习愉快!
\ No newline at end of file
......@@ -30,7 +30,7 @@
我创建了一个模型类“`Employee`”,它具有一些公开字段。 我想构建可以解析一组`employees`的代码。 请注意,JAXB 在最重要的类上需要 [`@XmlRootElement`](https://docs.oracle.com/javaee/5/api/javax/xml/bind/annotation/XmlRootElement.html "XmlRootElement") 注解,我们将对其进行编组或解组。
`ArrayList`类是集合框架的一部分,它没有任何 JAXB 注解。 因此,我们需要另外一个类别“`Employees`”,该类别将代表一组雇员。 现在,在该类中,我们可以添加任何我们喜欢的注
`ArrayList`类是集合框架的一部分,它没有任何 JAXB 注解。 因此,我们需要另外一个类别“`Employees`”,该类别将代表一组雇员。 现在,在该类中,我们可以添加任何我们喜欢的注
```java
@XmlRootElement(name = "employee")
......
......@@ -2,11 +2,11 @@
> 原文: [https://howtodoinjava.com/jaxb/java-class-to-xsd-eclipse/](https://howtodoinjava.com/jaxb/java-class-to-xsd-eclipse/)
学习**使用 Eclipse IDE 从带有 JAXB 注的 Java 类**创建 XML 模式文档(xsd)。
学习**使用 Eclipse IDE 从带有 JAXB 注的 Java 类**创建 XML 模式文档(xsd)。
## 1)将 JAXB 注添加到 Java 类
## 1)将 JAXB 注添加到 Java 类
第一步是向 Java 类添加`@XmlRootElement``@XmlAccessorType``@XmlElement`等注
第一步是向 Java 类添加`@XmlRootElement``@XmlAccessorType``@XmlElement`等注
```java
import java.io.Serializable;
......
......@@ -58,7 +58,7 @@ Class has two properties of the same name "employeeMap"
发生上述异常的主要原因是缺少`@XmlAccessType`注解或对`@XmlAccessType``@XxmlElement`注解的无效使用。 正确的用法是,一个 Java 字段应只包含一个表示其元数据的有效 JAXB 注解。
默认情况下,JAXB 包含所有公开字段和用于整理的获取器。 因此,如果您有一个字段及其获取器,那么它将包含两次。 这是错误,需要通过正确使用注来解决。
默认情况下,JAXB 包含所有公开字段和用于整理的获取器。 因此,如果您有一个字段及其获取器,那么它将包含两次。 这是错误,需要通过正确使用注来解决。
## 解决方案:使用`@XmlAccessType`注解
......@@ -96,7 +96,7 @@ public class Employees
**2)`@XmlAccessorType(XmlAccessType.NONE)`**
如果使用“`XmlAccessType.NONE`”,则意味着必须在输出 XML 中注释所有要编组的字段。 剩下的任何字段都不会包含在 JAXB 上下文中。 因此,本质上,`employee``size`字段都需要`@XmlElement`注解。 如果这两个字段中的任何一个都未使用`@XmlElement`注释,则不会将其编组。
如果使用“`XmlAccessType.NONE`”,则意味着必须在输出 XML 中注解所有要编组的字段。 剩下的任何字段都不会包含在 JAXB 上下文中。 因此,本质上,`employee``size`字段都需要`@XmlElement`注解。 如果这两个字段中的任何一个都未使用`@XmlElement`注解,则不会将其编组。
```java
@XmlRootElement(name = "employees")
......
......@@ -2,7 +2,7 @@
> 原文: [https://howtodoinjava.com/jaxb/marshal-without-xmlrootelement/](https://howtodoinjava.com/jaxb/marshal-without-xmlrootelement/)
很多时候,我们将需要**编组 Java 对象,而不使用 [JAXB 注](https://howtodoinjava.com/jaxb/jaxb-annotations/)**,例如[`@XmlRootElement`](https://howtodoinjava.com/jaxb/xmlrootelement-annotation/),并且我们不允许在源代码中进行任何更改。 当我们使用遗留代码或某些我们没有源代码的客户端 jar 时,可能会发生这种情况。
很多时候,我们将需要**编组 Java 对象,而不使用 [JAXB 注](https://howtodoinjava.com/jaxb/jaxb-annotations/)**,例如[`@XmlRootElement`](https://howtodoinjava.com/jaxb/xmlrootelement-annotation/),并且我们不允许在源代码中进行任何更改。 当我们使用遗留代码或某些我们没有源代码的客户端 jar 时,可能会发生这种情况。
可能还有许多其他情况,但是想法是*我们无法使用 JAXB 注解*修改模型类。 这可能是**将 Java 对象转换为 xml 而没有 jaxb** 的示例。
......
......@@ -2,9 +2,9 @@
> 原文: [https://howtodoinjava.com/jaxb/unmarshal-without-xmlrootelement/](https://howtodoinjava.com/jaxb/unmarshal-without-xmlrootelement/)
很多时候,您将需要**解组不具有诸如`@XmlRootElement`之类的 JAXB 注**的 Java 对象,并且不允许您对源代码进行任何更改。 当您使用旧代码或某些您没有源代码的客户端 jar 时,可能会发生这种情况。
很多时候,您将需要**解组不具有诸如`@XmlRootElement`之类的 JAXB 注**的 Java 对象,并且不允许您对源代码进行任何更改。 当您使用旧代码或某些您没有源代码的客户端 jar 时,可能会发生这种情况。
## 1.不带 jaxb 注释的解组问题
## 1.不带 JAXB 注解的解组问题
在这种情况下,如果您尝试直接将[ Java 对象解组为 XML](https://howtodoinjava.com/jaxb/read-xml-to-java-object/) ,则将出现类似的错误。
......@@ -81,7 +81,7 @@ public class Employee implements Serializable {
```
## 2.不带 jaxb 注释的解组解决方案
## 2.不带 JAXB 注解的解组解决方案
缺少`@XmlRootElement`注解时,JAXB 无法为`Employee`对象构建`JAXBElement`实例。 因此,您必须在此帮助 JAXB 手动构建它。
......
......@@ -15,7 +15,7 @@ String httpServletAddress = request.getRemoteAddr();
在上述情况下,可以使用 tomcat 提供的[`RemoteIpFilter`](https://tomcat.apache.org/tomcat-7.0-doc/api/org/apache/catalina/filters/RemoteIpFilter.html) servlet 过滤器。
要进行配置,请使用 Java 配置`RemoteIpFilter` – 在 spring boot 应用中,使用`@Configuration`注册 bean。
要进行配置,请使用 Java 配置`RemoteIpFilter` – 在 spring boot 应用中,使用`@Configuration`注册 bean。
```java
@Configuration
......
......@@ -71,7 +71,7 @@ exit 0
## 编写脚本执行器
至于本文,核心组件将保留在 bash 脚本之上,但仍然需要一种从应用运行`*.sh`文件的方法。 最好的方法是使用线程(如果需要,可以使用[执行器](https://docs.oracle.com/javase/1.5.0/docs/api/java/util/concurrent/ExecutorService.html "Executor Service"))。 该线程将以可配置的速率定期执行以上 bash 脚本。 我不会写那部分代码。 如果执行代码时遇到任何问题,请写下注释
至于本文,核心组件将保留在 bash 脚本之上,但仍然需要一种从应用运行`*.sh`文件的方法。 最好的方法是使用线程(如果需要,可以使用[执行器](https://docs.oracle.com/javase/1.5.0/docs/api/java/util/concurrent/ExecutorService.html "Executor Service"))。 该线程将以可配置的速率定期执行以上 bash 脚本。 我不会写那部分代码。 如果执行代码时遇到任何问题,请写下评论
让我给你一个示例代码::
......
......@@ -4,7 +4,7 @@
如今, [REST](http://restfulapi.net)[微服务](//howtodoinjava.com/microservices/microservices-definition-principles-benefits/)势头强劲。 同时,实际的 REST 规范并未建议任何标准方法来记录我们将要公开的 REST API(例如 WSDL for SOAP)。 结果,每个人都以自己的方式记录自己的 API,从而导致通用结构中的空白,所有这些都可以轻松地遵循,理解和使用。 我们需要一个通用的模式和工具。
[Swagger](https://swagger.io/)(得到了 Google,IBM,Microsoft 等公司的支持)完成了相同工作,以填补常见文档样式的空白。 在本教程中,我们将学习**使用 Swagger 来使用 **swagger2 注**来生成 REST API 文档**
[Swagger](https://swagger.io/)(得到了 Google,IBM,Microsoft 等公司的支持)完成了相同工作,以填补常见文档样式的空白。 在本教程中,我们将学习**使用 Swagger 来使用 **swagger2 注**来生成 REST API 文档**
```java
Table of Contents
......@@ -187,7 +187,7 @@ Swagger2 项目结构
#### 添加 Swagger2 配置
在代码库中添加以下配置。 为了帮助您理解配置,我添加了嵌入式注
在代码库中添加以下配置。 为了帮助您理解配置,我添加了嵌入式注
```java
package com.example.springbootswagger2.configuration;
......@@ -247,15 +247,15 @@ JSON 文档
![Swagger2 UI Docs without Annotations](img/de00227979aa13b38e66dc6d767ad0be.png)
Swagger2 UI 文档(无注
Swagger2 UI 文档(无注
## Swagger2 注
## Swagger2 注
默认生成的 API 文档很好,但是缺少详细的 API 级别信息。 Swagger 提供了一些注,可以将这些详细信息添加到 API。 例如:
默认生成的 API 文档很好,但是缺少详细的 API 级别信息。 Swagger 提供了一些注,可以将这些详细信息添加到 API。 例如:
1. `@Api` – 我们可以将此注添加到控制器,以添加有关控制器的基本信息。
1. `@Api` – 我们可以将此注添加到控制器,以添加有关控制器的基本信息。
```java
@Api(value = "Swagger2DemoRestController", description = "REST APIs related to Student Entity!!!!")
......@@ -265,7 +265,7 @@ Swagger2 UI 文档(无注释)
}
```
2. `@ApiOperation``@ApiResponses` – 我们可以将这些注添加到控制器中的任何 rest 方法,以添加与该方法有关的基本信息。 例如:
2. `@ApiOperation``@ApiResponses` – 我们可以将这些注添加到控制器中的任何 rest 方法,以添加与该方法有关的基本信息。 例如:
```java
@ApiOperation(value = "Get list of Students in the System ", response = Iterable.class, tags = "getStudents")
......@@ -284,14 +284,14 @@ Swagger2 UI 文档(无注释)
在这里,我们可以将`tags`添加到方法中,以在`swagger-ui`中添加一些分组。
3. `@ApiModelProperty` – 在 Model 属性中使用此注可为该 Model 属性的 Swagger 输出添加一些描述。 例如:
3. `@ApiModelProperty` – 在 Model 属性中使用此注可为该 Model 属性的 Swagger 输出添加一些描述。 例如:
```java
@ApiModelProperty(notes = "Name of the Student",name="name",required=true,value="test name")
private String name;
```
添加 swagger2 注后的控制器和模型类代码。
添加 swagger2 注后的控制器和模型类代码。
**`Swagger2DemoRestController.java`**
......@@ -406,7 +406,7 @@ public class Student
## 演示
现在,在正确注我们的 REST API 之后,我们来看一下最终输出。 打开`http://localhost:8080/swagger2-demo/swagger-ui.html`在浏览器中查看 Swagger ui 文档。
现在,在正确注我们的 REST API 之后,我们来看一下最终输出。 打开`http://localhost:8080/swagger2-demo/swagger-ui.html`在浏览器中查看 Swagger ui 文档。
![Final Swagger2 REST API Output](img/1f62370e64802188fb3551506abb9860.png)
......
......@@ -26,7 +26,7 @@
+ [JAXB 教程](28.md)
+ [JAXB 注解](29.md)
+ [JAXB `@XmlRootElement`注解示例](30.md)
+ [JAXB `@XmlElementWrapper`注示例](31.md)
+ [JAXB `@XmlElementWrapper`注示例](31.md)
+ [JAXB `Marshaller`(编组器)示例](32.md)
+ [JAXB `Unmarshaller`(解组器)示例](33.md)
+ [JAXB 读取 XML 到 Java 对象的示例](34.md)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册