Skip to content

Commit 5abe8de

Browse files
feat: make input and output serializable
1 parent 03f344b commit 5abe8de

File tree

6 files changed

+51
-6
lines changed

6 files changed

+51
-6
lines changed

src/main/java/org/springframework/data/jpa/datatables/mapping/Column.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,14 @@
77
import jakarta.validation.constraints.NotBlank;
88
import jakarta.validation.constraints.NotNull;
99

10+
import java.io.Serial;
11+
import java.io.Serializable;
12+
1013
@Data
1114
@NoArgsConstructor
1215
@AllArgsConstructor
13-
public class Column {
16+
public class Column implements Serializable {
17+
@Serial private static final long serialVersionUID = 5646239805793775339L;
1418

1519
/**
1620
* Column's data source

src/main/java/org/springframework/data/jpa/datatables/mapping/DataTablesInput.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@
55
import jakarta.validation.constraints.Min;
66
import jakarta.validation.constraints.NotEmpty;
77
import jakarta.validation.constraints.NotNull;
8+
9+
import java.io.Serial;
10+
import java.io.Serializable;
811
import java.util.*;
912

1013
/**
@@ -13,7 +16,9 @@
1316
* @see <a href="https://datatables.net/manual/server-side#Sent-parameters">datatables.net reference</a>
1417
*/
1518
@Data
16-
public class DataTablesInput {
19+
public class DataTablesInput implements Serializable {
20+
@Serial private static final long serialVersionUID = 4977905421750437988L;
21+
1722
/**
1823
* Draw counter. This is used by DataTables to ensure that the Ajax returns from server-side
1924
* processing requests are drawn in sequence by DataTables (Ajax requests are asynchronous and

src/main/java/org/springframework/data/jpa/datatables/mapping/DataTablesOutput.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,14 @@
33
import com.fasterxml.jackson.annotation.JsonView;
44
import lombok.Data;
55

6+
import java.io.Serial;
7+
import java.io.Serializable;
68
import java.util.Collections;
79
import java.util.List;
810

911
@Data
10-
public class DataTablesOutput<T> {
12+
public class DataTablesOutput<T> implements Serializable {
13+
@Serial private static final long serialVersionUID = -5222336791460405793L;
1114

1215
/**
1316
* The draw counter that this object is a response to - from the draw parameter sent as part of

src/main/java/org/springframework/data/jpa/datatables/mapping/Order.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,14 @@
88
import jakarta.validation.constraints.NotNull;
99
import jakarta.validation.constraints.Pattern;
1010

11+
import java.io.Serial;
12+
import java.io.Serializable;
13+
1114
@Data
1215
@NoArgsConstructor
1316
@AllArgsConstructor
14-
public class Order {
17+
public class Order implements Serializable {
18+
@Serial private static final long serialVersionUID = 4855306115483811642L;
1519

1620
/**
1721
* Column to which ordering should be applied. This is an index reference to the columns array of

src/main/java/org/springframework/data/jpa/datatables/mapping/Search.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,14 @@
66

77
import jakarta.validation.constraints.NotNull;
88

9+
import java.io.Serial;
10+
import java.io.Serializable;
11+
912
@Data
1013
@NoArgsConstructor
1114
@AllArgsConstructor
12-
public class Search {
15+
public class Search implements Serializable {
16+
@Serial private static final long serialVersionUID = -9209797224565963947L;
1317

1418
/**
1519
* Global search value. To be applied to all columns which have searchable as true.

src/test/java/org/springframework/data/jpa/datatables/mapping/DataTablesInputTest.java

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
package org.springframework.data.jpa.datatables.mapping;
22

3-
import org.junit.jupiter.api.Test;;
3+
import org.junit.jupiter.api.Test;
44

5+
import java.io.*;
56
import java.util.*;
67

78
import static java.util.Arrays.asList;
@@ -30,4 +31,28 @@ public void testParseSearchPanes() {
3031
entry("a.t.t.r.5", Set.of("7"))
3132
);
3233
}
34+
35+
@Test
36+
public void testJavaSerialization() throws Exception {
37+
DataTablesInput input = new DataTablesInput();
38+
input.setDraw(1);
39+
input.setStart(0);
40+
input.setLength(10);
41+
input.setSearch(new Search("test", false));
42+
input.setOrder(Collections.singletonList(new Order(0, "asc")));
43+
44+
ByteArrayOutputStream baos = new ByteArrayOutputStream();
45+
try (ObjectOutputStream oos = new ObjectOutputStream(baos)) {
46+
oos.writeObject(input);
47+
}
48+
49+
try (ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(baos.toByteArray()))) {
50+
DataTablesInput deserialized = (DataTablesInput) ois.readObject();
51+
assertThat(deserialized.getDraw()).isEqualTo(input.getDraw());
52+
assertThat(deserialized.getStart()).isEqualTo(input.getStart());
53+
assertThat(deserialized.getLength()).isEqualTo(input.getLength());
54+
assertThat(deserialized.getSearch().getValue()).isEqualTo(input.getSearch().getValue());
55+
assertThat(deserialized.getOrder().get(0).getColumn()).isEqualTo(input.getOrder().get(0).getColumn());
56+
}
57+
}
3358
}

0 commit comments

Comments
 (0)