Skip to content

Commit c80ec17

Browse files
authored
Merge pull request #21 from bsmahi/main
Upgrade to Spring Boot 4.0.x and Java 25
2 parents 73528bf + b346d36 commit c80ec17

39 files changed

+188
-9939
lines changed

02.restful-web-services/01-step-by-step-changes/v2.md

Lines changed: 97 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ On start.spring.io, Choose
5454
- groupId: `com.in28minutes.rest.webservices`
5555
- artifactId: `restful-web-services`
5656
- package: `com.in28minutes.rest.webservices.restfulwebservices`
57-
- Dependencies: Spring Boot Starter Web, DevTools, JPA and H2
57+
- Dependencies: Spring Web, DevTools, JPA and H2
5858

5959

6060
## Step 03
@@ -1230,6 +1230,28 @@ URLs
12301230
private LocalDate birthDate;
12311231

12321232
```
1233+
> [!NOTE]
1234+
MappingJacksonValue will be eliminated in an upcoming release of the Spring Framework. For further information:
1235+
- https://spring.io/blog/2025/10/07/introducing-jackson-3-support-in-spring#goodbye-mappingjacksonvalue
1236+
- https://github.com/danvega/donut-shop/blob/master/README.md
1237+
1238+
### /src/main/java/com/in28minutes/rest/webservices/restfulwebservices/filtering/Views.java New
1239+
1240+
```java
1241+
package com.in28minutes.rest.webservices.restfulwebservices.filtering;
1242+
1243+
/**
1244+
* <a href="https://spring.io/blog/2025/10/07/introducing-jackson-3-support-in-spring">Jackson 3 Support in Spring 4</a>
1245+
*/
1246+
public class Views {
1247+
1248+
public interface Public {
1249+
}
1250+
1251+
public interface Internal extends Public {
1252+
}
1253+
}
1254+
```
12331255

12341256
### /src/main/java/com/in28minutes/rest/webservices/restfulwebservices/filtering/FilteringController.java New
12351257

@@ -1239,72 +1261,88 @@ package com.in28minutes.rest.webservices.restfulwebservices.filtering;
12391261
import java.util.Arrays;
12401262
import java.util.List;
12411263

1242-
import org.springframework.http.converter.json.MappingJacksonValue;
1264+
import com.fasterxml.jackson.annotation.JsonView;
1265+
// import org.springframework.http.converter.json.MappingJacksonValue;
12431266
import org.springframework.web.bind.annotation.GetMapping;
12441267
import org.springframework.web.bind.annotation.RestController;
1268+
import tools.jackson.databind.json.JsonMapper;
1269+
import tools.jackson.databind.ser.FilterProvider;
1270+
import tools.jackson.databind.ser.std.SimpleBeanPropertyFilter;
1271+
import tools.jackson.databind.ser.std.SimpleFilterProvider;
12451272

1246-
import com.fasterxml.jackson.databind.ser.FilterProvider;
1247-
import com.fasterxml.jackson.databind.ser.impl.SimpleBeanPropertyFilter;
1248-
import com.fasterxml.jackson.databind.ser.impl.SimpleFilterProvider;
1273+
// BEFORE SPRING BOOT 4
1274+
// import com.fasterxml.jackson.databind.ser.FilterProvider;
1275+
// import com.fasterxml.jackson.databind.ser.impl.SimpleBeanPropertyFilter;
1276+
// import com.fasterxml.jackson.databind.ser.impl.SimpleFilterProvider;
12491277

12501278
@RestController
12511279
public class FilteringController {
1252-
1253-
@GetMapping("/filtering") //field2
1254-
public MappingJacksonValue filtering() {
1255-
1256-
SomeBean someBean = new SomeBean("value1","value2", "value3");
12571280

1258-
MappingJacksonValue mappingJacksonValue = new MappingJacksonValue(someBean);
1259-
1260-
SimpleBeanPropertyFilter filter =
1261-
SimpleBeanPropertyFilter.filterOutAllExcept("field1","field3");
1262-
1263-
FilterProvider filters =
1264-
new SimpleFilterProvider().addFilter("SomeBeanFilter", filter );
1265-
1266-
mappingJacksonValue.setFilters(filters );
1267-
1268-
1269-
return mappingJacksonValue;
1270-
}
1281+
@GetMapping("/filtering") //field2
1282+
@JsonView(Views.Public.class)
1283+
public String filtering() {
12711284

1272-
@GetMapping("/filtering-list") //field2, field3
1273-
public MappingJacksonValue filteringList() {
1274-
List<SomeBean> list = Arrays.asList(new SomeBean("value1","value2", "value3"),
1275-
new SomeBean("value4","value5", "value6"));
1276-
MappingJacksonValue mappingJacksonValue = new MappingJacksonValue(list);
1277-
1278-
SimpleBeanPropertyFilter filter =
1279-
SimpleBeanPropertyFilter.filterOutAllExcept("field2","field3");
1280-
1281-
FilterProvider filters =
1282-
new SimpleFilterProvider().addFilter("SomeBeanFilter", filter );
1283-
1284-
mappingJacksonValue.setFilters(filters );
1285-
1286-
1287-
return mappingJacksonValue;
1288-
}
1285+
// SomeBean someBean = new SomeBean("value1","value2", "value3");
1286+
var someBean = new SomeBean("value1","value2", "value3");
1287+
1288+
// MappingJacksonValue mappingJacksonValue = new MappingJacksonValue(someBean);
1289+
// SimpleBeanPropertyFilter filter =
1290+
// SimpleBeanPropertyFilter.filterOutAllExcept("field1","field3");
1291+
var filter = SimpleBeanPropertyFilter.filterOutAllExcept("field1","field3");
1292+
1293+
// FilterProvider filters =
1294+
// new SimpleFilterProvider().addFilter("SomeBeanFilter", filter );
1295+
var filters = new SimpleFilterProvider().addFilter("SomeBeanFilter", filter);
1296+
1297+
var jsonMapper = JsonMapper.builder().build();
1298+
1299+
// mappingJacksonValue.setFilters(filters );
1300+
// return mappingJacksonValue
1301+
return jsonMapper.writer(filters).writeValueAsString(someBean);
1302+
}
1303+
1304+
@GetMapping("/filtering-list") //field2, field3
1305+
public String filteringList() {
1306+
List<SomeBean> list = Arrays.asList(new SomeBean("value1","value2", "value3"),
1307+
new SomeBean("value4","value5", "value6"));
1308+
// MappingJacksonValue mappingJacksonValue = new MappingJacksonValue(list);
1309+
1310+
// SimpleBeanPropertyFilter filter =
1311+
// SimpleBeanPropertyFilter.filterOutAllExcept("field2","field3");
1312+
var filter = SimpleBeanPropertyFilter.filterOutAllExcept("field2", "field3");
1313+
1314+
// FilterProvider filters =
1315+
// new SimpleFilterProvider().addFilter("SomeBeanFilter", filter );
1316+
var filters = new SimpleFilterProvider().addFilter("SomeBeanFilter", filter);
1317+
1318+
// mappingJacksonValue.setFilters(filters );
1319+
var jsonMapper = JsonMapper.builder().build();
1320+
1321+
// return mappingJacksonValue;
1322+
return jsonMapper.writer(filters).writeValueAsString(list);
1323+
}
12891324

12901325
}
12911326
```
12921327

1293-
12941328
### /src/main/java/com/in28minutes/rest/webservices/restfulwebservices/filtering/SomeBean.java New
12951329

12961330
```java
12971331
package com.in28minutes.rest.webservices.restfulwebservices.filtering;
12981332

12991333
import com.fasterxml.jackson.annotation.JsonFilter;
1334+
import com.fasterxml.jackson.annotation.JsonView;
13001335

13011336
//@JsonIgnoreProperties({"field1","field2"})
13021337
@JsonFilter("SomeBeanFilter")
13031338
public class SomeBean {
1304-
private String field1;
1305-
1339+
@JsonView(Views.Public.class)
1340+
private String field1;
1341+
1342+
@JsonView(Views.Public.class)
13061343
private String field2;
13071344

1345+
@JsonView(Views.Public.class)
13081346
//@JsonIgnore
13091347
private String field3;
13101348

@@ -1373,6 +1411,17 @@ management.endpoints.web.exposure.include=*
13731411
- Step 28 - Creating User Entity and some test data
13741412
- Step 29 - Enhancing REST API to connect to H2 using JPA and Hibernate
13751413

1414+
### pom.xml - New
1415+
1416+
- To view the H2 console in the web browser, you need to manually add the following dependency to the `pom.xml` file.
1417+
1418+
```xml
1419+
<dependency>
1420+
<groupId>org.springframework.boot</groupId>
1421+
<artifactId>spring-boot-h2console</artifactId>
1422+
</dependency>
1423+
```
1424+
13761425
URLs
13771426
- H2-Console
13781427
- http://localhost:8080/h2-console
@@ -1813,7 +1862,11 @@ select * from post;
18131862
### /pom.xml Modified
18141863

18151864
```
1816-
<!--
1865+
<!--
1866+
<dependency>
1867+
<groupId>org.springframework.boot</groupId>
1868+
<artifactId>spring-boot-h2console</artifactId>
1869+
</dependency>
18171870
<dependency>
18181871
<groupId>com.h2database</groupId>
18191872
<artifactId>h2</artifactId>

02.restful-web-services/Step01.md

Lines changed: 0 additions & 133 deletions
This file was deleted.

02.restful-web-services/Step01.zip

-13.1 KB
Binary file not shown.

0 commit comments

Comments
 (0)