diff --git a/aws-modules/aws-lambda-modules/shipping-tracker-lambda/ShippingFunction/pom.xml b/aws-modules/aws-lambda-modules/shipping-tracker-lambda/ShippingFunction/pom.xml
index abd22ea50c..74a21068ee 100644
--- a/aws-modules/aws-lambda-modules/shipping-tracker-lambda/ShippingFunction/pom.xml
+++ b/aws-modules/aws-lambda-modules/shipping-tracker-lambda/ShippingFunction/pom.xml
@@ -31,15 +31,21 @@
${jackson-databind.version}
- org.hibernate
+ org.hibernate.orm
hibernate-core
${hibernate.version}
- org.hibernate
+ org.hibernate.orm
hibernate-hikaricp
${hibernate.version}
+
+ com.zaxxer
+ HikariCP
+ ${hikari.cp.version}
+
+
org.postgresql
postgresql
@@ -70,11 +76,12 @@
11
11
- 5.4.21.Final
+ 6.4.2.Final
1.2.0
3.1.0
2.11.2
42.2.16
+ 5.1.0
\ No newline at end of file
diff --git a/aws-modules/aws-lambda-modules/shipping-tracker-lambda/ShippingFunction/src/main/java/com/baeldung/lambda/shipping/App.java b/aws-modules/aws-lambda-modules/shipping-tracker-lambda/ShippingFunction/src/main/java/com/baeldung/lambda/shipping/App.java
index 95fd058667..464dbc7bff 100644
--- a/aws-modules/aws-lambda-modules/shipping-tracker-lambda/ShippingFunction/src/main/java/com/baeldung/lambda/shipping/App.java
+++ b/aws-modules/aws-lambda-modules/shipping-tracker-lambda/ShippingFunction/src/main/java/com/baeldung/lambda/shipping/App.java
@@ -83,7 +83,7 @@ private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
}
private static SessionFactory createSessionFactory() {
- Map settings = new HashMap<>();
+ Map settings = new HashMap<>();
settings.put(URL, System.getenv("DB_URL"));
settings.put(DIALECT, "org.hibernate.dialect.PostgreSQLDialect");
settings.put(DEFAULT_SCHEMA, "shipping");
diff --git a/aws-modules/aws-lambda-modules/shipping-tracker-lambda/ShippingFunction/src/main/java/com/baeldung/lambda/shipping/Checkin.java b/aws-modules/aws-lambda-modules/shipping-tracker-lambda/ShippingFunction/src/main/java/com/baeldung/lambda/shipping/Checkin.java
index 93e6404749..a7fa6a78a0 100644
--- a/aws-modules/aws-lambda-modules/shipping-tracker-lambda/ShippingFunction/src/main/java/com/baeldung/lambda/shipping/Checkin.java
+++ b/aws-modules/aws-lambda-modules/shipping-tracker-lambda/ShippingFunction/src/main/java/com/baeldung/lambda/shipping/Checkin.java
@@ -1,7 +1,7 @@
package com.baeldung.lambda.shipping;
-import javax.persistence.Column;
-import javax.persistence.Embeddable;
+import jakarta.persistence.Column;
+import jakarta.persistence.Embeddable;
@Embeddable
public class Checkin {
diff --git a/aws-modules/aws-lambda-modules/shipping-tracker-lambda/ShippingFunction/src/main/java/com/baeldung/lambda/shipping/Consignment.java b/aws-modules/aws-lambda-modules/shipping-tracker-lambda/ShippingFunction/src/main/java/com/baeldung/lambda/shipping/Consignment.java
index 1a2371b37f..86806d22cc 100644
--- a/aws-modules/aws-lambda-modules/shipping-tracker-lambda/ShippingFunction/src/main/java/com/baeldung/lambda/shipping/Consignment.java
+++ b/aws-modules/aws-lambda-modules/shipping-tracker-lambda/ShippingFunction/src/main/java/com/baeldung/lambda/shipping/Consignment.java
@@ -1,10 +1,10 @@
package com.baeldung.lambda.shipping;
-import javax.persistence.*;
+import jakarta.persistence.*;
import java.util.ArrayList;
import java.util.List;
-import static javax.persistence.FetchType.EAGER;
+import static jakarta.persistence.FetchType.EAGER;
@Entity(name = "consignment")
@Table(name = "consignment")
diff --git a/aws-modules/aws-lambda-modules/shipping-tracker-lambda/ShippingFunction/src/main/java/com/baeldung/lambda/shipping/Item.java b/aws-modules/aws-lambda-modules/shipping-tracker-lambda/ShippingFunction/src/main/java/com/baeldung/lambda/shipping/Item.java
index de6194e180..d59ab5ba5e 100644
--- a/aws-modules/aws-lambda-modules/shipping-tracker-lambda/ShippingFunction/src/main/java/com/baeldung/lambda/shipping/Item.java
+++ b/aws-modules/aws-lambda-modules/shipping-tracker-lambda/ShippingFunction/src/main/java/com/baeldung/lambda/shipping/Item.java
@@ -1,7 +1,7 @@
package com.baeldung.lambda.shipping;
-import javax.persistence.Column;
-import javax.persistence.Embeddable;
+import jakarta.persistence.Column;
+import jakarta.persistence.Embeddable;
@Embeddable
public class Item {
diff --git a/core-java-modules/core-java-19/src/main/java/com/baeldung/vectors/VectorAPIExamples.java b/core-java-modules/core-java-19/src/main/java/com/baeldung/vectors/VectorAPIExamples.java
index eda36dbfde..37468fbdbd 100644
--- a/core-java-modules/core-java-19/src/main/java/com/baeldung/vectors/VectorAPIExamples.java
+++ b/core-java-modules/core-java-19/src/main/java/com/baeldung/vectors/VectorAPIExamples.java
@@ -63,7 +63,7 @@ public class VectorAPIExamples {
public float[] scalarNormOfTwoArrays(float[] arr1, float[] arr2) {
float[] finalResult = new float[arr1.length];
for (int i = 0; i < arr1.length; i++) {
- finalResult[i] = (arr1[i] * arr1[i] + arr2[i] * arr2[i]) * -1.0f;
+ finalResult[i] = (float) Math.sqrt(arr1[i] * arr1[i] + arr2[i] * arr2[i]);
}
return finalResult;
}
@@ -77,13 +77,13 @@ public class VectorAPIExamples {
var vb = FloatVector.fromArray(PREFERRED_SPECIES, arr2, i);
var vc = va.mul(va)
.add(vb.mul(vb))
- .neg();
+ .sqrt();
vc.intoArray(finalResult, i);
}
// tail cleanup
for (; i < arr1.length; i++) {
- finalResult[i] = (arr1[i] * arr1[i] + arr2[i] * arr2[i]) * -1.0f;
+ finalResult[i] = (float) Math.sqrt(arr1[i] * arr1[i] + arr2[i] * arr2[i]);
}
return finalResult;
}
diff --git a/core-java-modules/core-java-19/src/test/java/com/baeldung/vectors/VectorAPIUnitTest.java b/core-java-modules/core-java-19/src/test/java/com/baeldung/vectors/VectorAPIUnitTest.java
index 22b37a2b28..97e77a474f 100644
--- a/core-java-modules/core-java-19/src/test/java/com/baeldung/vectors/VectorAPIUnitTest.java
+++ b/core-java-modules/core-java-19/src/test/java/com/baeldung/vectors/VectorAPIUnitTest.java
@@ -28,7 +28,7 @@ public class VectorAPIUnitTest {
public void whenTwoValuesProvided_thenComputeScalarNorm() {
float[] arr1 = { 1, 2.3f };
float[] arr2 = { 1.3f, 2.0f };
- float[] result = { -2.6899998f, -9.29f };
+ float[] result = { 1.6401219f, 3.047950f };
Assertions.assertArrayEquals(result, vector.scalarNormOfTwoArrays(arr1, arr2));
}
@@ -36,7 +36,7 @@ public class VectorAPIUnitTest {
public void whenTwoValuesProvided_thenComputeVectorNorm() {
float[] arr1 = { 1, 2.3f };
float[] arr2 = { 1.3f, 2.0f };
- float[] result = { -2.6899998f, -9.29f };
+ float[] result = { 1.6401219f, 3.047950f };
Assertions.assertArrayEquals(result, vector.vectorNormalForm(arr1, arr2));
}
diff --git a/core-java-modules/core-java-collections-maps-7/src/test/java/com/baeldung/map/entrysettolinkedhashmap/EntrySetToLinkedHashMapUnitTest.java b/core-java-modules/core-java-collections-maps-7/src/test/java/com/baeldung/map/entrysettolinkedhashmap/EntrySetToLinkedHashMapUnitTest.java
new file mode 100644
index 0000000000..aa8398893e
--- /dev/null
+++ b/core-java-modules/core-java-collections-maps-7/src/test/java/com/baeldung/map/entrysettolinkedhashmap/EntrySetToLinkedHashMapUnitTest.java
@@ -0,0 +1,111 @@
+package com.baeldung.map.entrysettolinkedhashmap;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.entry;
+
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+public class EntrySetToLinkedHashMapUnitTest {
+
+ private Map map;
+
+ @Test
+ void givenMap_whenUsingCollectorsGroupingBy_thenCollectToLinkedHashMap() {
+ Map> countryToCities = Map.of("Paris", "France", "Nice", "France", "Madrid", "Spain")
+ .entrySet()
+ .stream()
+ .collect(Collectors.groupingBy(Map.Entry::getValue, LinkedHashMap::new, Collectors.mapping(Map.Entry::getKey, Collectors.toSet())));
+
+ assertThat(countryToCities).isExactlyInstanceOf(LinkedHashMap.class)
+ .containsOnly(entry("France", Set.of("Paris", "Nice")), entry("Spain", Set.of("Madrid")));
+ }
+
+ @Test
+ void givenMap_whenUsingCollectorsToMap_thenCollectAndConvertToLinkedHashMap() {
+ Map result = new LinkedHashMap<>(map.entrySet()
+ .stream()
+ .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)));
+
+ assertThat(result).isExactlyInstanceOf(LinkedHashMap.class)
+ .containsOnly(entry(1, "value 1"), entry(2, "value 2"));
+ }
+
+ @Test
+ void givenMap_whenUsingCollectorsToMap_thenCollectToLinkedHashMap() {
+ Map result = map.entrySet()
+ .stream()
+ .collect(Collectors.toMap(
+ Map.Entry::getKey, Map.Entry::getValue,
+ (e1, e2) -> {
+ throw new RuntimeException();
+ },
+ LinkedHashMap::new));
+
+ assertThat(result).isExactlyInstanceOf(LinkedHashMap.class)
+ .containsOnly(entry(1, "value 1"), entry(2, "value 2"));
+ }
+
+ @Test
+ void givenMap_whenUsingLinkedHashMapConstructor_thenObtainLinkedHashMap() {
+ Map result = new LinkedHashMap<>(map);
+
+ assertThat(result).isExactlyInstanceOf(LinkedHashMap.class)
+ .containsOnly(entry(1, "value 1"), entry(2, "value 2"));
+ }
+
+ @Test
+ void givenMap_whenUsingPutWithForLoop_thenInsertIntoLinkedHashMap() {
+ Map result = new LinkedHashMap<>();
+
+ for (Map.Entry entry : map.entrySet()) {
+ result.put(entry.getKey(), entry.getValue());
+ }
+
+ assertThat(result).isExactlyInstanceOf(LinkedHashMap.class)
+ .containsOnly(entry(1, "value 1"), entry(2, "value 2"));
+ }
+
+ @Test
+ void givenMap_whenUsingPutWithMapForEach_thenInsertIntoLinkedHashMap() {
+ Map result = new LinkedHashMap<>();
+
+ map.forEach((k, v) -> result.put(k, v));
+
+ assertThat(result).isExactlyInstanceOf(LinkedHashMap.class)
+ .containsOnly(entry(1, "value 1"), entry(2, "value 2"));
+ }
+
+ @Test
+ void givenMap_whenUsingPutWithSetForEach_thenInsertIntoLinkedHashMap() {
+ Map result = new LinkedHashMap<>();
+
+ map.entrySet()
+ .forEach(entry -> result.put(entry.getKey(), entry.getValue()));
+
+ assertThat(result).isExactlyInstanceOf(LinkedHashMap.class)
+ .containsOnly(entry(1, "value 1"), entry(2, "value 2"));
+ }
+
+ @Test
+ void givenMap_whenUsingPutWithStreamForEach_thenInsertIntoLinkedHashMapp() {
+ Map result = new LinkedHashMap<>();
+
+ map.entrySet()
+ .stream()
+ .forEach(entry -> result.put(entry.getKey(), entry.getValue()));
+
+ assertThat(result).isExactlyInstanceOf(LinkedHashMap.class)
+ .containsOnly(entry(1, "value 1"), entry(2, "value 2"));
+ }
+
+ @BeforeEach
+ void init() {
+ map = Map.of(1, "value 1", 2, "value 2");
+ }
+}
\ No newline at end of file
diff --git a/core-java-modules/core-java-console/README.md b/core-java-modules/core-java-console/README.md
index cab2cc24be..d6ec953f48 100644
--- a/core-java-modules/core-java-console/README.md
+++ b/core-java-modules/core-java-console/README.md
@@ -9,3 +9,4 @@
- [How to Log to the Console in Color](https://www.baeldung.com/java-log-console-in-color)
- [Create Table Using ASCII in a Console in Java](https://www.baeldung.com/java-console-ascii-make-table)
- [Printing Message on Console without Using main() Method in Java](https://www.baeldung.com/java-no-main-print-message-console)
+- [Guide to System.in.read()](https://www.baeldung.com/java-system-in-read)
diff --git a/core-java-modules/core-java-console/src/main/java/com/baeldung/systemin/SystemInRead.java b/core-java-modules/core-java-console/src/main/java/com/baeldung/systemin/SystemInRead.java
new file mode 100644
index 0000000000..e815cdae2f
--- /dev/null
+++ b/core-java-modules/core-java-console/src/main/java/com/baeldung/systemin/SystemInRead.java
@@ -0,0 +1,45 @@
+package com.baeldung.systemin;
+
+import java.io.IOException;
+
+class SystemInRead {
+ static void readSingleCharacter() {
+ System.out.println("Enter a character:");
+ try {
+ int input = System.in.read();
+ System.out.println((char) input);
+ }
+ catch (IOException e) {
+ System.err.println("Error reading input: " + e.getMessage());
+ }
+ }
+ static void readMultipleCharacters() {
+ System.out.println("Enter characters (Press 'Enter' to quit):");
+ try {
+ int input;
+ while ((input = System.in.read()) != '\n') {
+ System.out.print((char) input);
+ }
+ } catch (IOException e) {
+ System.err.println("Error reading input: " + e.getMessage());
+ }
+ }
+
+ static void readWithParameters() {
+ try {
+ byte[] byteArray = new byte[5];
+ int bytesRead;
+ int totalBytesRead = 0;
+
+ while ((bytesRead = System.in.read(byteArray, 0, byteArray.length)) != -1) {
+ System.out.print("Data read: " + new String(byteArray, 0, bytesRead));
+ totalBytesRead += bytesRead;
+ }
+
+ System.out.println("\nBytes Read: " + totalBytesRead);
+
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+}
diff --git a/core-java-modules/core-java-console/src/test/java/com/baeldung/systemin/SystemInReadUnitTest.java b/core-java-modules/core-java-console/src/test/java/com/baeldung/systemin/SystemInReadUnitTest.java
new file mode 100644
index 0000000000..60ed99ca3a
--- /dev/null
+++ b/core-java-modules/core-java-console/src/test/java/com/baeldung/systemin/SystemInReadUnitTest.java
@@ -0,0 +1,41 @@
+package com.baeldung.systemin;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.PrintStream;
+
+import org.junit.jupiter.api.Test;
+
+public class SystemInReadUnitTest {
+ @Test
+ void givenUserInput_whenUsingReadMultipleCharacters_thenRead() {
+ System.setIn(new ByteArrayInputStream("Hello\n".getBytes()));
+ ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
+ System.setOut(new PrintStream(outputStream));
+ SystemInRead.readMultipleCharacters();
+
+ assertEquals("Enter characters (Press 'Enter' to quit):\n" + "Hello", outputStream.toString().trim());
+ }
+
+ @Test
+ void givenUserInput_whenUsingReadSingleCharacter_thenRead() {
+ System.setIn(new ByteArrayInputStream("A".getBytes()));
+ ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
+ System.setOut(new PrintStream(outputStream));
+ SystemInRead.readSingleCharacter();
+
+ assertEquals("Enter a character:\nA", outputStream.toString().trim());
+ }
+
+ @Test
+ void givenUserInput_whenUsingReadWithParameters_thenRead() {
+ System.setIn(new ByteArrayInputStream("ABC".getBytes()));
+ ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
+ System.setOut(new PrintStream(outputStream));
+ SystemInRead.readWithParameters();
+
+ assertEquals("Data read: ABC\n" + "Bytes Read: 3", outputStream.toString().trim());
+ }
+}
diff --git a/core-java-modules/core-java-string-operations-8/README.md b/core-java-modules/core-java-string-operations-8/README.md
new file mode 100644
index 0000000000..2dce44d217
--- /dev/null
+++ b/core-java-modules/core-java-string-operations-8/README.md
@@ -0,0 +1,2 @@
+
+### Relevant Articles:
diff --git a/core-java-modules/core-java-string-operations-8/pom.xml b/core-java-modules/core-java-string-operations-8/pom.xml
new file mode 100644
index 0000000000..2495abccf8
--- /dev/null
+++ b/core-java-modules/core-java-string-operations-8/pom.xml
@@ -0,0 +1,72 @@
+
+
+ 4.0.0
+ core-java-string-operations-8
+ core-java-string-operations-8
+ jar
+
+
+ com.baeldung.core-java-modules
+ core-java-modules
+ 0.0.1-SNAPSHOT
+
+
+
+
+ org.apache.commons
+ commons-lang3
+ ${apache.commons.lang3.version}
+
+
+ org.apache.commons
+ commons-text
+ ${commons-text.version}
+
+
+ org.liquibase
+ liquibase-core
+ 4.9.1
+ test
+
+
+ org.junit.jupiter
+ junit-jupiter
+ 5.8.1
+ test
+
+
+ org.liquibase
+ liquibase-core
+ 4.9.1
+ test
+
+
+ junit
+ junit
+ 4.13.2
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+
+ ${maven.compiler.source}
+ ${maven.compiler.target}
+
+
+
+
+
+
+ 11
+ 11
+ 3.13.0
+ 1.10.0
+
+
+
\ No newline at end of file
diff --git a/core-java-modules/core-java-string-operations-8/src/test/java/com/baeldung/emailandphonemasking/EmailAndPhoneMaskingUnitTest.java b/core-java-modules/core-java-string-operations-8/src/test/java/com/baeldung/emailandphonemasking/EmailAndPhoneMaskingUnitTest.java
new file mode 100644
index 0000000000..e390c2d2cd
--- /dev/null
+++ b/core-java-modules/core-java-string-operations-8/src/test/java/com/baeldung/emailandphonemasking/EmailAndPhoneMaskingUnitTest.java
@@ -0,0 +1,53 @@
+package com.baeldung.emailandphonemasking;
+
+import org.junit.jupiter.api.Test;
+
+import java.util.stream.Collectors;
+import java.util.stream.IntStream;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+public class EmailAndPhoneMaskingUnitTest {
+
+
+ String phoneNumber = "+12344567890";
+ String expectedMaskedPhoneNumber = "+*******7890";
+ String email = "testemailaddress@example.com";
+ String expectedMaskedEmail = "te**************@example.com";
+
+ @Test
+ public void givenEmailAddress_whenUsingStringManipulation_thenMaskEmail() {
+ int atIndex = email.indexOf('@');
+ String repeatedString = IntStream.range(0, atIndex - 2).mapToObj(i -> "*").collect(Collectors.joining());
+ String maskedPart = email.substring(0, atIndex - repeatedString.length()) + repeatedString;
+ String maskedEmail = maskedPart + email.substring(atIndex);
+ assertEquals(expectedMaskedEmail, maskedEmail);
+ }
+
+ @Test
+ public void givenEmailAddress_whenUsingRegex_thenMaskEmail() {
+ int atIndex = email.indexOf('@');
+ String regex = "(.{2})(.*)(@.*)";
+ String repeatedAsterisks = "*".repeat(atIndex - 2);
+ String maskedEmail = email.replaceAll(regex, "$1" + repeatedAsterisks + "$3");
+ assertEquals(expectedMaskedEmail, maskedEmail);
+ }
+
+
+ @Test
+ public void givenPhoneNumber_whenUsingStringManipulation_thenMaskPhone() {
+ String maskedPhoneNumber = phoneNumber.replaceAll("\\d(?=\\d{4})", "*");
+ assertEquals(expectedMaskedPhoneNumber, maskedPhoneNumber);
+ }
+
+ @Test
+ public void givenPhoneNumber_whenUsingRegex_thenMaskPhone() {
+ int lastDigitsIndex = phoneNumber.length() - 5;
+ String regex = "(\\+)(\\d+)(\\d{4})";
+ String repeatedAsterisks = "*".repeat(Math.max(0, lastDigitsIndex));
+ String maskedPhoneNumber = phoneNumber.replaceAll(regex, "$1" + repeatedAsterisks + "$3");
+ assertEquals(expectedMaskedPhoneNumber, maskedPhoneNumber);
+ }
+
+
+}
diff --git a/core-java-modules/pom.xml b/core-java-modules/pom.xml
index 227da74156..3d26d51a6a 100644
--- a/core-java-modules/pom.xml
+++ b/core-java-modules/pom.xml
@@ -33,6 +33,7 @@
+
core-java-numbers-conversions
core-java-9-improvements
@@ -199,6 +200,7 @@
core-java-string-operations-2
core-java-string-operations-6
core-java-string-operations-7
+ core-java-string-operations-8
core-java-regex
core-java-regex-2
core-java-regex-3
diff --git a/json-modules/json-conversion/src/main/java/com/baeldung/preventexpressingintasfloat/Main.java b/json-modules/json-conversion/src/main/java/com/baeldung/preventexpressingintasfloat/Main.java
new file mode 100644
index 0000000000..c0f14fa73d
--- /dev/null
+++ b/json-modules/json-conversion/src/main/java/com/baeldung/preventexpressingintasfloat/Main.java
@@ -0,0 +1,22 @@
+package com.baeldung.preventexpressingintasfloat;
+
+import com.google.gson.Gson;
+import com.google.gson.reflect.TypeToken;
+
+import java.lang.reflect.Type;
+import java.util.ArrayList;
+import java.util.Hashtable;
+
+public class Main {
+ public static String draft = "[{\"id\":4077395,\"field_id\":242566,\"body\":\"\"}, " +
+ "{\"id\":4077398,\"field_id\":242569,\"body\":[[273019,0],[273020,1],[273021,0]]}, " +
+ "{\"id\":4077399,\"field_id\":242570,\"body\":[[273022,0],[273023,1],[273024,0]]}]";
+
+ public static void main(String[] args) {
+ ArrayList> responses;
+ Type ResponseList = new TypeToken>>() {
+ }.getType();
+ responses = new Gson().fromJson(draft, ResponseList);
+ System.out.println(responses);
+ }
+}
\ No newline at end of file
diff --git a/json-modules/json-conversion/src/test/java/com/baeldung/preventexpressingintasfloat/PreventExpressingIntAsFloatUnitTest.java b/json-modules/json-conversion/src/test/java/com/baeldung/preventexpressingintasfloat/PreventExpressingIntAsFloatUnitTest.java
new file mode 100644
index 0000000000..6ada093ab3
--- /dev/null
+++ b/json-modules/json-conversion/src/test/java/com/baeldung/preventexpressingintasfloat/PreventExpressingIntAsFloatUnitTest.java
@@ -0,0 +1,30 @@
+package com.baeldung.preventexpressingintasfloat;
+
+import com.google.gson.*;
+import com.google.gson.reflect.TypeToken;
+import org.junit.jupiter.api.Test;
+
+import java.util.ArrayList;
+import java.util.Hashtable;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+public class PreventExpressingIntAsFloatUnitTest {
+
+ public String jsonString = "[{\"id\":4077395,\"field_id\":242566,\"body\":\"\"}, " +
+ "{\"id\":4077398,\"field_id\":242569,\"body\":[[273019,0],[273020,1],[273021,0]]}, " +
+ "{\"id\":4077399,\"field_id\":242570,\"body\":[[273022,0],[273023,1],[273024,0]]}]";
+
+ public String expectedOutput = "[{body=, field_id=242566, id=4077395}, " +
+ "{body=[[273019, 0], [273020, 1], [273021, 0]], field_id=242569, id=4077398}, " +
+ "{body=[[273022, 0], [273023, 1], [273024, 0]], field_id=242570, id=4077399}]";
+
+ @Test
+ public void givenJsonString_whenUsingsetObjectToNumberStrategyMethod_thenValidateOutput() {
+ Gson gson = new GsonBuilder().setObjectToNumberStrategy(ToNumberPolicy.LONG_OR_DOUBLE).create();
+ ArrayList> responses = gson.fromJson(jsonString, new TypeToken>>() {
+ }.getType());
+
+ assertEquals(expectedOutput, responses.toString());
+ }
+}
diff --git a/patterns-modules/design-patterns-architectural/pom.xml b/patterns-modules/design-patterns-architectural/pom.xml
index 20f320f073..ec7dae42b3 100644
--- a/patterns-modules/design-patterns-architectural/pom.xml
+++ b/patterns-modules/design-patterns-architectural/pom.xml
@@ -31,7 +31,7 @@
${rest-assured.version}
- org.hibernate
+ org.hibernate.orm
hibernate-core
${hibernate-core.version}
@@ -64,7 +64,7 @@
- 5.2.16.Final
+ 6.4.2.Final
8.2.0
2.7.5
5.3.0
diff --git a/patterns-modules/design-patterns-architectural/src/main/java/com/baeldung/daopattern/application/UserApplication.java b/patterns-modules/design-patterns-architectural/src/main/java/com/baeldung/daopattern/application/UserApplication.java
index 3a5c049992..a39a16edf7 100644
--- a/patterns-modules/design-patterns-architectural/src/main/java/com/baeldung/daopattern/application/UserApplication.java
+++ b/patterns-modules/design-patterns-architectural/src/main/java/com/baeldung/daopattern/application/UserApplication.java
@@ -6,8 +6,8 @@ import com.baeldung.daopattern.daos.JpaUserDao;
import com.baeldung.daopattern.entities.User;
import java.util.List;
import java.util.Optional;
-import javax.persistence.EntityManager;
-import javax.persistence.Persistence;
+import jakarta.persistence.EntityManager;
+import jakarta.persistence.Persistence;
public class UserApplication {
diff --git a/patterns-modules/design-patterns-architectural/src/main/java/com/baeldung/daopattern/config/JpaEntityManagerFactory.java b/patterns-modules/design-patterns-architectural/src/main/java/com/baeldung/daopattern/config/JpaEntityManagerFactory.java
index 11718d5612..d7ce1c8df0 100644
--- a/patterns-modules/design-patterns-architectural/src/main/java/com/baeldung/daopattern/config/JpaEntityManagerFactory.java
+++ b/patterns-modules/design-patterns-architectural/src/main/java/com/baeldung/daopattern/config/JpaEntityManagerFactory.java
@@ -8,10 +8,10 @@ import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.stream.Collectors;
-import javax.persistence.EntityManager;
+import jakarta.persistence.EntityManager;
import javax.sql.DataSource;
-import javax.persistence.EntityManagerFactory;
-import javax.persistence.spi.PersistenceUnitInfo;
+import jakarta.persistence.EntityManagerFactory;
+import jakarta.persistence.spi.PersistenceUnitInfo;
import org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl;
import org.hibernate.jpa.boot.internal.PersistenceUnitInfoDescriptor;
diff --git a/patterns-modules/design-patterns-architectural/src/main/java/com/baeldung/daopattern/config/PersistenceUnitInfoImpl.java b/patterns-modules/design-patterns-architectural/src/main/java/com/baeldung/daopattern/config/PersistenceUnitInfoImpl.java
index f3277da0cf..f75b1424c1 100644
--- a/patterns-modules/design-patterns-architectural/src/main/java/com/baeldung/daopattern/config/PersistenceUnitInfoImpl.java
+++ b/patterns-modules/design-patterns-architectural/src/main/java/com/baeldung/daopattern/config/PersistenceUnitInfoImpl.java
@@ -6,11 +6,11 @@ import java.util.Collections;
import java.util.List;
import java.util.Properties;
import javax.sql.DataSource;
-import javax.persistence.SharedCacheMode;
-import javax.persistence.ValidationMode;
-import javax.persistence.spi.ClassTransformer;
-import javax.persistence.spi.PersistenceUnitInfo;
-import javax.persistence.spi.PersistenceUnitTransactionType;
+import jakarta.persistence.SharedCacheMode;
+import jakarta.persistence.ValidationMode;
+import jakarta.persistence.spi.ClassTransformer;
+import jakarta.persistence.spi.PersistenceUnitInfo;
+import jakarta.persistence.spi.PersistenceUnitTransactionType;
import org.hibernate.jpa.HibernatePersistenceProvider;
public class PersistenceUnitInfoImpl implements PersistenceUnitInfo {
diff --git a/patterns-modules/design-patterns-architectural/src/main/java/com/baeldung/daopattern/daos/JpaUserDao.java b/patterns-modules/design-patterns-architectural/src/main/java/com/baeldung/daopattern/daos/JpaUserDao.java
index f4d80c0ee9..e48c0f3906 100644
--- a/patterns-modules/design-patterns-architectural/src/main/java/com/baeldung/daopattern/daos/JpaUserDao.java
+++ b/patterns-modules/design-patterns-architectural/src/main/java/com/baeldung/daopattern/daos/JpaUserDao.java
@@ -5,9 +5,9 @@ import java.util.List;
import java.util.Objects;
import java.util.Optional;
import java.util.function.Consumer;
-import javax.persistence.EntityManager;
-import javax.persistence.EntityTransaction;
-import javax.persistence.Query;
+import jakarta.persistence.EntityManager;
+import jakarta.persistence.EntityTransaction;
+import jakarta.persistence.Query;
public class JpaUserDao implements Dao {
diff --git a/patterns-modules/design-patterns-architectural/src/main/java/com/baeldung/daopattern/entities/User.java b/patterns-modules/design-patterns-architectural/src/main/java/com/baeldung/daopattern/entities/User.java
index 58d8ffb28b..5c4176a275 100644
--- a/patterns-modules/design-patterns-architectural/src/main/java/com/baeldung/daopattern/entities/User.java
+++ b/patterns-modules/design-patterns-architectural/src/main/java/com/baeldung/daopattern/entities/User.java
@@ -1,10 +1,10 @@
package com.baeldung.daopattern.entities;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.Table;
+import jakarta.persistence.Entity;
+import jakarta.persistence.GeneratedValue;
+import jakarta.persistence.GenerationType;
+import jakarta.persistence.Id;
+import jakarta.persistence.Table;
@Entity
@Table(name = "users")
diff --git a/patterns-modules/design-patterns-architectural/src/main/java/com/baeldung/repositoryvsdaopattern/UserDaoImpl.java b/patterns-modules/design-patterns-architectural/src/main/java/com/baeldung/repositoryvsdaopattern/UserDaoImpl.java
index 24ca04263b..212dd8714a 100644
--- a/patterns-modules/design-patterns-architectural/src/main/java/com/baeldung/repositoryvsdaopattern/UserDaoImpl.java
+++ b/patterns-modules/design-patterns-architectural/src/main/java/com/baeldung/repositoryvsdaopattern/UserDaoImpl.java
@@ -1,6 +1,6 @@
package com.baeldung.repositoryvsdaopattern;
-import javax.persistence.EntityManager;
+import jakarta.persistence.EntityManager;
public class UserDaoImpl implements UserDao {
diff --git a/pom.xml b/pom.xml
index fe201fee89..dc2156faf8 100644
--- a/pom.xml
+++ b/pom.xml
@@ -822,7 +822,7 @@
spring-actuator
spring-ai
spring-aop-2
-
+ spring-aop
spring-batch-2
spring-batch
spring-boot-modules
@@ -1063,7 +1063,7 @@
spring-actuator
spring-ai
spring-aop-2
-
+ spring-aop
spring-batch-2
spring-batch
spring-boot-modules
diff --git a/spring-aop/pom.xml b/spring-aop/pom.xml
index 8ff5f20126..2805ec0d45 100644
--- a/spring-aop/pom.xml
+++ b/spring-aop/pom.xml
@@ -86,6 +86,7 @@
1.14.0
+ 16
\ No newline at end of file
diff --git a/spring-aop/src/test/java/com/baeldung/joinpoint/JoinPointAroundCacheAspectIntegrationTest.java b/spring-aop/src/test/java/com/baeldung/joinpoint/JoinPointAroundCacheAspectIntegrationTest.java
index 4bd8f2ad8e..750f036fdf 100644
--- a/spring-aop/src/test/java/com/baeldung/joinpoint/JoinPointAroundCacheAspectIntegrationTest.java
+++ b/spring-aop/src/test/java/com/baeldung/joinpoint/JoinPointAroundCacheAspectIntegrationTest.java
@@ -1,5 +1,6 @@
package com.baeldung.joinpoint;
+import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
@@ -21,6 +22,10 @@ public class JoinPointAroundCacheAspectIntegrationTest {
@Autowired
private ArticleService articleService;
+ @Before
+ public void removeCache() {
+ JoinPointAroundCacheAspect.CACHE.clear();
+ }
@Test
public void shouldPopulateCache() {
assertTrue(JoinPointAroundCacheAspect.CACHE.isEmpty());
diff --git a/spring-security-modules/pom.xml b/spring-security-modules/pom.xml
index 57b7bae761..3f3b40b040 100644
--- a/spring-security-modules/pom.xml
+++ b/spring-security-modules/pom.xml
@@ -27,7 +27,7 @@
spring-security-oauth2-sso
spring-security-oidc
spring-security-okta
- spring-security-saml
+
spring-security-social-login
spring-security-web-angular
spring-security-web-boot-1
diff --git a/spring-security-modules/spring-security-opa/README.md b/spring-security-modules/spring-security-opa/README.md
index d2c1652edb..fc50304073 100644
--- a/spring-security-modules/spring-security-opa/README.md
+++ b/spring-security-modules/spring-security-opa/README.md
@@ -1,3 +1,4 @@
+Note: For integration testing get the OPA server running first. Check the official [OPA documentation](https://www.openpolicyagent.org/docs/latest/) for instructions on how to run the OPA server.
### Relevant Articles:
diff --git a/spring-security-modules/spring-security-opa/pom.xml b/spring-security-modules/spring-security-opa/pom.xml
index 81c4709124..05d135947b 100644
--- a/spring-security-modules/spring-security-opa/pom.xml
+++ b/spring-security-modules/spring-security-opa/pom.xml
@@ -1,14 +1,15 @@
-
+
4.0.0
spring-security-opa
Spring Security with OPA authorization
com.baeldung
- spring-security-modules
+ parent-boot-3
0.0.1-SNAPSHOT
+ ../../parent-boot-3
@@ -28,7 +29,7 @@
com.google.guava
guava
- 31.0.1-jre
+ ${guava.version}
org.springframework.boot
diff --git a/spring-security-modules/spring-security-opa/src/main/java/com/baeldung/security/opa/Application.java b/spring-security-modules/spring-security-opa/src/main/java/com/baeldung/security/opa/Application.java
index 789a1f803f..a698630f3b 100644
--- a/spring-security-modules/spring-security-opa/src/main/java/com/baeldung/security/opa/Application.java
+++ b/spring-security-modules/spring-security-opa/src/main/java/com/baeldung/security/opa/Application.java
@@ -5,7 +5,7 @@ import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Application {
-
+
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
diff --git a/spring-security-modules/spring-security-opa/src/main/java/com/baeldung/security/opa/config/OpaConfiguration.java b/spring-security-modules/spring-security-opa/src/main/java/com/baeldung/security/opa/config/OpaConfiguration.java
index e24fdbcf35..2a96bef606 100644
--- a/spring-security-modules/spring-security-opa/src/main/java/com/baeldung/security/opa/config/OpaConfiguration.java
+++ b/spring-security-modules/spring-security-opa/src/main/java/com/baeldung/security/opa/config/OpaConfiguration.java
@@ -11,15 +11,14 @@ import lombok.RequiredArgsConstructor;
@RequiredArgsConstructor
@EnableConfigurationProperties(OpaProperties.class)
public class OpaConfiguration {
-
+
private final OpaProperties opaProperties;
-
+
@Bean
public WebClient opaWebClient(WebClient.Builder builder) {
-
- return builder
- .baseUrl(opaProperties.getEndpoint())
- .build();
+
+ return builder.baseUrl(opaProperties.getEndpoint())
+ .build();
}
}
diff --git a/spring-security-modules/spring-security-opa/src/main/java/com/baeldung/security/opa/config/OpaProperties.java b/spring-security-modules/spring-security-opa/src/main/java/com/baeldung/security/opa/config/OpaProperties.java
index acc23a2fd2..0a12f4d772 100644
--- a/spring-security-modules/spring-security-opa/src/main/java/com/baeldung/security/opa/config/OpaProperties.java
+++ b/spring-security-modules/spring-security-opa/src/main/java/com/baeldung/security/opa/config/OpaProperties.java
@@ -1,14 +1,14 @@
package com.baeldung.security.opa.config;
-import javax.annotation.Nonnull;
-
import org.springframework.boot.context.properties.ConfigurationProperties;
+import jakarta.annotation.Nonnull;
import lombok.Data;
@ConfigurationProperties(prefix = "opa")
@Data
public class OpaProperties {
+
@Nonnull
private String endpoint = "http://localhost:8181";
}
diff --git a/spring-security-modules/spring-security-opa/src/main/java/com/baeldung/security/opa/config/SecurityConfiguration.java b/spring-security-modules/spring-security-opa/src/main/java/com/baeldung/security/opa/config/SecurityConfiguration.java
index 7e10cb2e8a..98de220e21 100644
--- a/spring-security-modules/spring-security-opa/src/main/java/com/baeldung/security/opa/config/SecurityConfiguration.java
+++ b/spring-security-modules/spring-security-opa/src/main/java/com/baeldung/security/opa/config/SecurityConfiguration.java
@@ -1,8 +1,6 @@
package com.baeldung.security.opa.config;
-import java.util.Arrays;
import java.util.Collections;
-import java.util.HashMap;
import java.util.Map;
import java.util.stream.Collectors;
@@ -11,17 +9,16 @@ import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.MediaType;
-import org.springframework.http.client.reactive.ClientHttpRequest;
import org.springframework.security.authentication.AnonymousAuthenticationToken;
import org.springframework.security.authorization.AuthorizationDecision;
import org.springframework.security.authorization.ReactiveAuthorizationManager;
+import org.springframework.security.config.Customizer;
import org.springframework.security.config.web.server.ServerHttpSecurity;
import org.springframework.security.core.Authentication;
+import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.web.server.SecurityWebFilterChain;
import org.springframework.security.web.server.authorization.AuthorizationContext;
-import org.springframework.web.reactive.function.BodyInserter;
-import org.springframework.web.reactive.function.BodyInserters;
import org.springframework.web.reactive.function.client.ClientResponse;
import org.springframework.web.reactive.function.client.WebClient;
@@ -32,79 +29,65 @@ import reactor.core.publisher.Mono;
@Configuration
public class SecurityConfiguration {
-
-
+
@Bean
- public SecurityWebFilterChain accountAuthorization(ServerHttpSecurity http, @Qualifier("opaWebClient")WebClient opaWebClient) {
-
- // @formatter:on
- return http
- .httpBasic()
- .and()
- .authorizeExchange(exchanges -> {
- exchanges
- .pathMatchers("/account/*")
- .access(opaAuthManager(opaWebClient));
- })
- .build();
- // @formatter:on
-
+ public SecurityWebFilterChain accountAuthorization(ServerHttpSecurity http, @Qualifier("opaWebClient") WebClient opaWebClient) {
+ return http.httpBasic(Customizer.withDefaults())
+ .authorizeExchange(exchanges -> exchanges.pathMatchers("/account/*")
+ .access(opaAuthManager(opaWebClient)))
+ .build();
}
@Bean
public ReactiveAuthorizationManager opaAuthManager(WebClient opaWebClient) {
-
- return (auth, context) -> {
- return opaWebClient.post()
- .accept(MediaType.APPLICATION_JSON)
- .contentType(MediaType.APPLICATION_JSON)
- .body(toAuthorizationPayload(auth,context), Map.class)
- .exchangeToMono(this::toDecision);
- };
+ return (auth, context) -> opaWebClient.post()
+ .accept(MediaType.APPLICATION_JSON)
+ .contentType(MediaType.APPLICATION_JSON)
+ .body(toAuthorizationPayload(auth, context), Map.class)
+ .exchangeToMono(this::toDecision);
}
private Mono toDecision(ClientResponse response) {
-
- if ( !response.statusCode().is2xxSuccessful()) {
+ if (!response.statusCode()
+ .is2xxSuccessful()) {
return Mono.just(new AuthorizationDecision(false));
}
-
- return response
- .bodyToMono(ObjectNode.class)
- .map(node -> {
- boolean authorized = node.path("result").path("authorized").asBoolean(false);
- return new AuthorizationDecision(authorized);
- });
-
+
+ return response.bodyToMono(ObjectNode.class)
+ .map(node -> {
+ boolean authorized = node.path("result")
+ .path("authorized")
+ .asBoolean(false);
+ return new AuthorizationDecision(authorized);
+ });
+
}
- private Publisher
+
+ org.apache.httpcomponents.client5
+ httpclient5
+ ${httpclient5.version}
+ test
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+ true
+
+
+
+
+
1.4.9
1.12
+ 5.2.1
\ No newline at end of file
diff --git a/spring-web-modules/spring-rest-http/src/main/java/com/baeldung/responseheaders/controllers/FilterResponseHeaderController.java b/spring-web-modules/spring-rest-http/src/main/java/com/baeldung/responseheaders/controllers/FilterResponseHeaderController.java
index c92d4afafd..7a650a3e05 100644
--- a/spring-web-modules/spring-rest-http/src/main/java/com/baeldung/responseheaders/controllers/FilterResponseHeaderController.java
+++ b/spring-web-modules/spring-rest-http/src/main/java/com/baeldung/responseheaders/controllers/FilterResponseHeaderController.java
@@ -1,22 +1,22 @@
package com.baeldung.responseheaders.controllers;
-import javax.servlet.http.HttpServletResponse;
-
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
+import jakarta.servlet.http.HttpServletResponse;
+
@RestController
@RequestMapping("/filter-response-header")
public class FilterResponseHeaderController {
@GetMapping("/no-extra-header")
- public String FilterHeaderResponseWithNoExtraHeader() {
+ public String filterHeaderResponseWithNoExtraHeader() {
return "Response body with Filter header and no extra header";
}
@GetMapping("/extra-header")
- public String FilterHeaderResponseWithExtraHeader(HttpServletResponse response) {
+ public String filterHeaderResponseWithExtraHeader(HttpServletResponse response) {
response.addHeader("Baeldung-Example-Header", "Value-ExtraHeader");
return "Response body with Filter header and one extra header";
}
diff --git a/spring-web-modules/spring-rest-http/src/main/java/com/baeldung/responseheaders/controllers/ResponseHeaderController.java b/spring-web-modules/spring-rest-http/src/main/java/com/baeldung/responseheaders/controllers/ResponseHeaderController.java
index d93964b815..dab6467ec7 100644
--- a/spring-web-modules/spring-rest-http/src/main/java/com/baeldung/responseheaders/controllers/ResponseHeaderController.java
+++ b/spring-web-modules/spring-rest-http/src/main/java/com/baeldung/responseheaders/controllers/ResponseHeaderController.java
@@ -4,7 +4,7 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
-import javax.servlet.http.HttpServletResponse;
+import jakarta.servlet.http.HttpServletResponse;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
diff --git a/spring-web-modules/spring-rest-http/src/main/java/com/baeldung/responseheaders/filter/AddResponseHeaderFilter.java b/spring-web-modules/spring-rest-http/src/main/java/com/baeldung/responseheaders/filter/AddResponseHeaderFilter.java
index 7d4ffb1391..7820f6c650 100644
--- a/spring-web-modules/spring-rest-http/src/main/java/com/baeldung/responseheaders/filter/AddResponseHeaderFilter.java
+++ b/spring-web-modules/spring-rest-http/src/main/java/com/baeldung/responseheaders/filter/AddResponseHeaderFilter.java
@@ -2,18 +2,18 @@ package com.baeldung.responseheaders.filter;
import java.io.IOException;
-import javax.servlet.Filter;
-import javax.servlet.FilterChain;
-import javax.servlet.FilterConfig;
-import javax.servlet.ServletException;
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
-import javax.servlet.annotation.WebFilter;
-import javax.servlet.http.HttpServletResponse;
-
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import jakarta.servlet.Filter;
+import jakarta.servlet.FilterChain;
+import jakarta.servlet.FilterConfig;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.ServletRequest;
+import jakarta.servlet.ServletResponse;
+import jakarta.servlet.annotation.WebFilter;
+import jakarta.servlet.http.HttpServletResponse;
+
@WebFilter("/filter-response-header/*")
public class AddResponseHeaderFilter implements Filter {
diff --git a/spring-web-modules/spring-rest-http/src/main/java/com/baeldung/web/controller/customer/CustomerRestController.java b/spring-web-modules/spring-rest-http/src/main/java/com/baeldung/web/controller/customer/CustomerRestController.java
index edae10de27..061c5eb3e4 100644
--- a/spring-web-modules/spring-rest-http/src/main/java/com/baeldung/web/controller/customer/CustomerRestController.java
+++ b/spring-web-modules/spring-rest-http/src/main/java/com/baeldung/web/controller/customer/CustomerRestController.java
@@ -23,8 +23,6 @@ import org.springframework.web.servlet.support.ServletUriComponentsBuilder;
import java.net.URI;
-import javax.validation.Valid;
-
@RestController
@RequestMapping(value = "/customers")
public class CustomerRestController {
@@ -40,25 +38,28 @@ public class CustomerRestController {
public ResponseEntity createCustomer(@RequestBody Customer customer) {
Customer customerCreated = customerService.createCustomer(customer);
URI location = ServletUriComponentsBuilder.fromCurrentRequest()
- .path("/{id}")
- .buildAndExpand(customerCreated.getId())
- .toUri();
- return ResponseEntity.created(location).build();
+ .path("/{id}")
+ .buildAndExpand(customerCreated.getId())
+ .toUri();
+ return ResponseEntity.created(location)
+ .build();
}
@PatchMapping(path = "/{id}", consumes = "application/json-patch+json")
- public ResponseEntity updateCustomer(@PathVariable String id,
- @RequestBody JsonPatch patch) {
+ public ResponseEntity updateCustomer(@PathVariable String id, @RequestBody JsonPatch patch) {
try {
- Customer customer = customerService.findCustomer(id).orElseThrow(CustomerNotFoundException::new);
+ Customer customer = customerService.findCustomer(id)
+ .orElseThrow(CustomerNotFoundException::new);
Customer customerPatched = applyPatchToCustomer(patch, customer);
customerService.updateCustomer(customerPatched);
return ResponseEntity.ok(customerPatched);
} catch (CustomerNotFoundException e) {
- return ResponseEntity.status(HttpStatus.NOT_FOUND).build();
+ return ResponseEntity.status(HttpStatus.NOT_FOUND)
+ .build();
} catch (JsonPatchException | JsonProcessingException e) {
- return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build();
+ return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)
+ .build();
}
}