Π₯Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚ΠΎΠ²Π—Π΅Ρ€ΠΊΠ°Π»Π° Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π—Π΅Ρ€ΠΊΠ°Π»ΠΎ MavenΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π·Π΅Ρ€ΠΊΠ°Π»Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Java

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π·Π΅Ρ€ΠΊΠ°Π»Π° Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Java

Настоящий ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ доступСн Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ GitVerse, Π² Π²Π΅Ρ‚ΠΊΠ΅ maven-mirror ΠΈ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ maven-ΠΏΠ°ΠΊΠ΅Ρ‚Π° com.fasterxml.jackson Ρ‡Π΅Ρ€Π΅Π· Π·Π΅Ρ€ΠΊΠ°Π»ΠΎ https://mvn-mirror.gitverse.ru.

ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ класс ObjectMapper для прСобразования Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° JSON Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Java ΠΈ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚, Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ сСриализации ΠΈ дСсСриализации выводится Π² консоль.

ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ смотритС Π½ΠΈΠΆΠ΅ Π² описании Ρ„Π°ΠΉΠ»Π° JsonExample.java.

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°

gitverse-registry-mirrors/
β”œβ”€β”€ README.md
β”œβ”€β”€ dependency-reduced-pom.xml
β”œβ”€β”€ pom.xml
β”œβ”€β”€ settings.xml  # ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ для справки
β”œβ”€β”€ src
β”‚   └── main
β”‚       └── java
β”‚           └── ru/gitverse/tutorials/jsonexample
β”‚               └── JsonExample.java
└── target/

ΠšΡ€Π°Ρ‚ΠΊΠΎΠ΅ описаниС:

  • README.md β€” настоящСС руководство;
  • dependency-reduced-pom.xml β€” информация ΠΎ зависимостях Π² объСдинСнном JAR-Ρ„Π°ΠΉΠ»Π΅. БоздаСтся автоматичСски Π² Maven-ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ ΠΏΡ€ΠΈ использовании ΠΏΠ»Π°Π³ΠΈΠ½Π° maven-shade-plugin;
  • pom.xml β€” описаниС зависимости нашСго ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°;
  • src/main/java β€” ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ для исходного ΠΊΠΎΠ΄Π° Java;
  • src/main/java/ru/gitverse/tutorials/jsonexample/JsonExample.java β€” Ρ„Π°ΠΉΠ» класса, Π³Π΄Π΅ ru.gitverse.tutorials.jsonexample.JsonExample β€” ΠΏΠΎΠ»Π½ΠΎΠ΅ ΠΊΠ²Π°Π»ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ имя класса. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ Java ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΏΠΎΠ»Π½ΠΎΠ΅ имя класса для поиска ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ Ρ„Π°ΠΉΠ»Π° с исходным ΠΊΠΎΠ΄ΠΎΠΌ;
  • target/ β€” ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ создаСтся автоматичСски ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ сборки ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΈ автоматичСскиС удаляСтся ΠΏΡ€ΠΈ пСрСсборкС ΠΈ очисткС.

dependency-reduced-pom.xml

Π€Π°ΠΉΠ» dependency-reduced-pom.xml создаСтся автоматичСски Π² Maven ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ ΠΏΡ€ΠΈ использовании ΠΏΠ»Π°Π³ΠΈΠ½Π° maven-shade-plugin, Π² Π½Π΅ΠΌ содСрТится ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ зависимостях Π² объСдинСнном JAR-Ρ„Π°ΠΉΠ»Π΅ (fat JAR) послС процСсса ΡƒΠΏΠ°ΠΊΠΎΠ²ΠΊΠΈ.

Плагин maven-shade-plugin позволяСт ΡƒΠΏΠ°ΠΊΠΎΠ²Π°Ρ‚ΡŒ всС зависимости Π² ΠΎΠ΄ΠΈΠ½ JAR-Ρ„Π°ΠΉΠ» (fat JAR), ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΏΠ»Π°Π³ΠΈΠ½Π° Π² pom.xml описано Π΄Π°Π»Π΅Π΅.

pom.xml

pom.xml (Project Object Model) - основной Ρ„Π°ΠΉΠ» ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ…, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΡ… систСму сборки Maven. Он прСдставляСт собой XML-Ρ„Π°ΠΉΠ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ содСрТит всю Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅: ΠΎΡ‚ Π΅Π³ΠΎ названия ΠΈ вСрсии Π΄ΠΎ зависимостСй ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ ΠΈ ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… для сборки.

Код Ρ„Π°ΠΉΠ»Π° pom.xml:

<?xml version="1.0" encoding="UTF-8"?>
<project>
 
  <modelVersion>4.0.0</modelVersion>
 
  <groupId>your-group-id</groupId>
  <artifactId>jsonexample</artifactId>
  <version>1.0-SNAPSHOT</version>
  <properties>
    <java.version>11</java.version>
  </properties>
 
  <dependencies>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.17.1</version> 
    </dependency>
  </dependencies>
 
  <build>
    <plugins>
        <plugin>
              <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-jar-plugin</artifactId>
              <version>3.3.0</version>
              <configuration>
                  <archive>
                      <manifest>
                          <addClasspath>true</addClasspath>
                          <mainClass>ru.gitverse.tutorials.jsonexample.JsonExample</mainClass>
                      </manifest>
                  </archive>
              </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.11.0</version>
            <configuration> Β  
            <source>11</source>
            <target>11</target>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>3.6.0</version>
            <configuration>
                <!-- put your configurations here -->
            </configuration>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>shade</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
        <plugin>
          <groupId>org.codehaus.mojo</groupId>
          <artifactId>exec-maven-plugin</artifactId>
          <version>3.5.0</version>
          <configuration>
            <mainClass>ru.gitverse.tutorials.jsonexample.JsonExample</mainClass>
          </configuration>
        </plugin>
    </plugins>
  </build>
</project>

Π‘Π΅ΠΊΡ†ΠΈΠΈ pom.xml:

  • <modelVersion> β€” ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π²Π΅Ρ€ΡΠΈΡŽ ΠΌΠΎΠ΄Π΅Π»ΠΈ POM;
  • <groupId> β€” ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π³Ρ€ΡƒΠΏΠΏΡ‹ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°;
  • <artifactId> β€” ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ это имя ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°;
  • <version> β€” вСрсия ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. ВСрсия 1.0-SNAPSHOT ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ находится Π² стадии Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ (SNAPSHOT);
  • <properties> β€” ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для опрСдСлСния свойств, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Ρ‹ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… частях pom.xml:
    • <java.version> β€” вСрсия Java для сборки ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. ΠŸΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ свою Π²Π΅Ρ€ΡΠΈΡŽ Java ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ java -version;
  • <dependencies> β€” список зависимостСй ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, здСсь ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Ρ‚ΡΡ maven-ΠΏΠ°ΠΊΠ΅Ρ‚ com.fasterxml.jackson Ρ‡Π΅Ρ€Π΅Π· Π·Π΅Ρ€ΠΊΠ°Π»ΠΎ https://mvn-mirror.gitverse.ru. ΠšΠ»ΡŽΡ‡Π΅Π²Π°Ρ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°;
  • <build> β€” опрСдСляСт ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ сборки ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.

БСкция <build> Π² pom.xml

maven-jar-plugin ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для создания JAR-Ρ„Π°ΠΉΠ»Π° ΠΈΠ· Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² компиляции ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. Он ΡƒΠΏΠ°ΠΊΠΎΠ²Ρ‹Π²Π°Π΅Ρ‚ классы, рСсурсы ΠΈ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅ Π² стандартный JAR-Ρ„ΠΎΡ€ΠΌΠ°Ρ‚:

<plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>
        <version>3.3.0</version>
        <configuration>
            <archive>
                <manifest>
                    <addClasspath>true</addClasspath>
                    <mainClass>ru.gitverse.tutorials.jsonexample.JsonExample</mainClass>
                </manifest>
            </archive>
        </configuration>
</plugin>

maven-compiler-plugin ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ исходного ΠΊΠΎΠ΄Π° Java Π² Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄. Он позволяСт Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ совмСстимости Java, ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡŽ компиляции ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.11.0</version>
    <configuration> Β  
    <source>11</source>
    <target>11</target>
    </configuration>
</plugin>

maven-shade-plugin ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для создания «толстых» JAR-Ρ„Π°ΠΉΠ»ΠΎΠ² (fat JAR), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ всС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ зависимости. Он ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ‚ классы ΠΈ рСсурсы ΠΈΠ· зависимостСй Π² ΠΎΠ΄ΠΈΠ½ JAR-Ρ„Π°ΠΉΠ»:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <version>3.6.0</version>
    <configuration>
        <!-- put your configurations here -->
    </configuration>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>shade</goal>
            </goals>
        </execution>
    </executions>
</plugin>

exec-maven-plugin позволяСт Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ исполняСмыС классы нСпосрСдствСнно ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки Maven (mvn compile exec:java). Он ΠΏΠΎΠ»Π΅Π·Π΅Π½ для тСстирования ΠΈ ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π±Π΅Π· нСобходимости запуска ΠΈΡ… ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>exec-maven-plugin</artifactId>
    <version>3.5.0</version>
    <configuration>
    <mainClass>ru.gitverse.tutorials.jsonexample.JsonExample</mainClass>
    </configuration>
</plugin>

settings.xml

Π€Π°ΠΉΠ» ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ для ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π·Π΅Ρ€ΠΊΠ°Π»Π° https://npm-mirror.gitverse.ru. Π‘Π΅ΠΊΡ†ΠΈΠΈ Π·Π΅Ρ€ΠΊΠ°Π»Π° ΠΈ профиля слСдуСт ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ settings.xml, ΡƒΠΆΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌ Π½Π° Π² вашСй ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмС. Если Ρ„Π°ΠΉΠ»Π° Π½Π΅Ρ‚, Π΅Π³ΠΎ слСдуСт ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ.

РасполоТСниС Ρ„Π°ΠΉΠ»Π° settings.xml:

  • для Windows β€” c:\Users\<YourUsername>\.m2\settings.xml;
  • для MacOS ΠΈ Linux β€” /home/username/.m2/settings.xml (домашняя дирСктория ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ).

Код Ρ„Π°ΠΉΠ»Π° settings.xml:

<?xml version="1.0" encoding="UTF-8"?>
<settings>
<!-- БСкция mirrors -->
    <mirrors>
        <mirror>
            <id>mvn-mirror</id>
            <name>GitVerse Maven Mirror</name>
            <url>https://mvn-mirror.gitverse.ru</url>
            <mirrorOf>*</mirrorOf>
        </mirror>
    </mirrors>
 
    <profiles>
        <profile>
            <id>gitverse</id>
            <repositories>
                <repository>
                    <id>mvn-mirror</id>
                    <url>https://mvn-mirror.gitverse.ru</url>
                    <releases><enabled>true</enabled></releases>
                    <snapshots><enabled>true</enabled></snapshots>
                </repository>
            </repositories>
            <pluginRepositories>
                <pluginRepository>
                    <id>mvn-mirror</id>
                    <url>https://mvn-mirror.gitverse.ru</url>
                    <releases><enabled>true</enabled></releases>
                    <snapshots><enabled>true</enabled></snapshots>
                </pluginRepository>
            </pluginRepositories>
        </profile>
    </profiles>
 
    <!-- БСкция Π°ΠΊΡ‚ΠΈΠ²Π°Ρ†ΠΈΠΈ профиля -->
    <activeProfiles>
        <activeProfile>gitverse</activeProfile>
    </activeProfiles>
</settings>

JsonExample.java

Класс JsonExample.java являСтся Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ Π²Ρ…ΠΎΠ΄Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈ содСрТит основной ΠΌΠ΅Ρ‚ΠΎΠ΄ main(), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ запускаСтся ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

Π’ ΠΊΠΎΠ΄Π΅ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ ΠΏΠ°ΠΊΠ΅Ρ‚ ΠΏΠ°ΠΊΠ΅Ρ‚ com.fasterxml.jackson, класс ObjectMapper ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Ρ‹Π²Π°Π΅Ρ‚ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ JSON Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Java ΠΈ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ сСриализации ΠΈ дСсСриализации выводятся Π² консоль.

JSON задаСтся Π² Π΄Π²ΡƒΡ… мСстах:

  1. Π’Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π² процСссС сСриализации Π² ΠΏΠ΅Ρ€Π²ΠΎΠΉ части ΠΊΠΎΠ΄Π° Π² строкС:
String jsonString = mapper.writeValueAsString(person);
  1. Π’ ΠΏΡ€Π΅Π΄ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ строкС Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ части ΠΊΠΎΠ΄Π°:
String json = "{\"name\":\"Jane Smith\", \"age\": 25}";

Код Ρ„Π°ΠΉΠ»Π° JsonExample.java:

package ru.gitverse.tutorials.jsonexample;
 
import com.fasterxml.jackson.databind.ObjectMapper;
 
public class JsonExample {
    public static void main(String[] args) throws Exception
 {
        ObjectMapper mapper = new ObjectMapper();
 
        // Serialize a Java object to JSON
        Person person = new Person("Jane Smith", 25);
        String jsonString = mapper.writeValueAsString(person);
        System.out.println(jsonString);
 
        // Deserialize a JSON string to a Java object
        String json = "{\"name\":\"Jane Smith\", \"age\": 25}";
        Person deserializedPerson = mapper.readValue(json, Person.class);
        System.out.println(deserializedPerson.getName()  + ", " + deserializedPerson.getAge());
    }
 
    static class Person {
        public String name;
        public int age;
 
        public Person() {
            // Optionally, initialize default values for name and age here
        }
 
        public Person(String name, int age) {
            this.name = name;
            this.age = age;
 
        }
 
        public String getName() {
            return this.name;
        }
         
        public void setName(String name) {
            this.name = name;
        }
        
        public int getAge() {
            return this.age;
        }
        
        public void setAge(int age) {
            this.age = age;;
        }
    }
}

ПояснСния:

  • package ru.gitverse.tutorials.jsonexample; β€” имя ΠΏΠ°ΠΊΠ΅Ρ‚Π°, указываСтся Π² сСкциях pom.xml для ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠΉ сборки ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. ПолноС ΠΊΠ²Π°Π»ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΎΠ½Π½ΠΎΠ΅ имя формируСтся ΠΈΠ· ΠΈΠΌΠ΅Π½ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚Π° ΠΈ ΠΈΠΌΠ΅Π½ΠΈ класса (JsonExample);

  • import com.fasterxml.jackson.databind.ObjectMapper; β€” ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ maven-ΠΏΠ°ΠΊΠ΅Ρ‚Π° com.fasterxml.jackson;

  • public class JsonExample JsonExample:

    • Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° main:

      • сСриализация (ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π² JSON):
        • создаСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ObjectMapper ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ mapper. Π­Ρ‚ΠΎΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ JSON;
        • создаСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Person с ΠΈΠΌΠ΅Π½Π΅ΠΌ person ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌΠΈ значСниями ΠΈΠΌΠ΅Π½ΠΈ ΠΈ возраста.;
        • ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ person сСриализуСтся (прСобразуСтся) Π² jsonString с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° mapper.writeValueAsString(person);
        • jsonString выводится Π² консоль с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ System.out.println(jsonString);;
      • дСсСриализация (ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ JSON Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚):
        • опрСдСляСтся строка json с ΡƒΠΆΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ прСдставлСниСм ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Person Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ JSON;
        • ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ mapper дСсСриализауСт строку json;
        • дСсСриализованный ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Person выводится Π² консоль с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ System.out.println(deserializedPerson.name + ", " + deserializedPerson.age);;
    • static class Person:

      • ΠΈΠΌΠ΅Π΅Ρ‚ Π΄Π²Π° ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½Ρ‹Ρ… поля:
        • name β€” строковая пСрСмСнная для хранСния ΠΈΠΌΠ΅Π½ΠΈ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠ°;
        • age β€” цСлочислСнная пСрСмСнная для хранСния возраста Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠ°;
      • ΠΈΠΌΠ΅Π΅Ρ‚ Π΄Π²Π° конструктора:
        • конструктор ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π±Π΅Π· Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ²;
        • ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€, ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰ΠΈΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ name (строка) ΠΈ age (Ρ†Π΅Π»ΠΎΠ΅ число);
      • содСрТит ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ getName() ΠΈ setName() для доступа ΠΊ полю name, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ getAge() ΠΈ setAge() для доступа ΠΊ полю age.

ΠšΠ°Ρ‚Π°Π»ΠΎΠ³ target

ΠšΠ°Ρ‚Π°Π»ΠΎΠ³ target создаСтся автоматичСски ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ сборки ΠΈ очистки ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

  • mvn package β€” ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ исходный ΠΊΠΎΠ΄, выполняСт тСсты ΠΈ ΡƒΠΏΠ°ΠΊΠΎΠ²Ρ‹Π²Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π² JAR- ΠΈΠ»ΠΈ WAR‑файл. Π‘ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ классы, рСсурсы ΠΈ ΠΈΡ‚ΠΎΠ³ΠΎΠ²Ρ‹ΠΉ Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚ ΠΏΠΎΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ target.
  • mvn clean β€” yдаляСт всС содСрТимоС ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° target;
  • mvn clean package β€” ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ выполняСт очистку ΠΈ сборку ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.

Запуск ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΠΊΠΎΠ΄Π°

Запуск ΠΊΠΎΠ΄Π° Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ сСриализации ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π² JSON ΠΈ Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ строкС Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ:

{"name":"Jane Smith","age":25}
Jane Smith, 25

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡ ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡ ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ mvn compile exec:java для быстрого запуска ΠΈ тСстирования:

$ mvn compile exec:java
...
[INFO] --- exec-maven-plugin:3.5.0:java (default-cli) @ jsonexample ---
{"name":"Jane Smith","age":25}
Jane Smith, 25
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  1.076 s
[INFO] Finished at: 2024-11-25T20:40:42+03:00
[INFO] ------------------------------------------------------------------------

Π‘Π±ΠΎΡ€ΠΊΠ° ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ JAR-Ρ„Π°ΠΉΠ»Π°

Команда для сборки ΠΈ JAR-Ρ„Π°ΠΉΠ»Π°:

mvn clean package && java -jar target/jsonexample-1.0-SNAPSHOT.jar

Π’Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ Π² консоли:

$ mvn clean package && java -jar target/jsonexample-1.0-SNAPSHOT.jar
...
{"name":"Jane Smith","age":25}
Jane Smith, 25

БвязанныС Ρ€Π°Π·Π΄Π΅Π»Ρ‹

  1. GitVerse Maven Package Registry.
  2. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ создания ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² Maven.

Π’Ρ‹ нашли Ρ‡Ρ‚ΠΎ искали?