Comments (7)
I tested the json-module.
<dependency>
<groupId>com.devonfw.java.modules</groupId>
<artifactId>devon4j-json</artifactId>
<version>2021.04.003</version>
</dependency>
@Named("ApplicationObjectMapperFactory")
public class ApplicationObjectMapperFactory extends ObjectMapperFactory {
public ApplicationObjectMapperFactory() {
super();
SimpleModule module = getExtensionModule();
// register spring-data Pageable
module.addSerializer(Pageable.class, new PageableJsonSerializer());
module.addDeserializer(Pageable.class, new PageableJsonDeserializer());
}
}
and inject custom mapper to resteasy
@Component
@Provider
@Consumes({"application/json", "application/*+json", "text/json"})
@Produces({"application/json", "application/*+json", "text/json"})
public class CustomJacksonJsonProvider extends ResteasyJackson2Provider {
@Inject
ObjectMapperFactory objectMapperFactory;
@Override
public ObjectMapper locateMapper(Class<?> type, MediaType mediaType) {
ObjectMapper om = objectMapperFactory.createInstance();
return om;
}
}
Result:
- the page result can be customized BUT it only works in jvm mode and NOT in native mode.
from devon4quarkus.
I think you do not simple can use the devon4j-json module in the Quarkus context. You have to implement the ObjectMapperCustomizer
(io.quarkus.jackson.ObjectMapperCustomizer) as described here. Then you can add a custom serializer in the customize
method.
@Override
public void customize(ObjectMapper objectMapper) {
SimpleModule module = new SimpleModule();
module.addSerializer(Page.class, new JsonSerializer<Page>() {
@Override
public void serialize(Page value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
...
}
});
objectMapper.registerModule(module);
}
from devon4quarkus.
@GuentherJulian you are right. That should do it. Thanks. I saw the problem now, even the json-module does not provide a serializer for Page.class (only Pagable.class)
from devon4quarkus.
Implement custom mapper using io.quarkus.jackson.ObjectMapperCustomizer
(code in this branch)
the custom serializer for Page.class. We can customize further here if wanted
public class PageSerializer extends JsonSerializer<Page> {
@Override
public void serialize(Page page, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
if (page != null) {
jsonGenerator.writeStartObject();
jsonGenerator.writeObjectField("content", page.getContent());
jsonGenerator.writeObjectField("pageable", page.getPageable());
jsonGenerator.writeBooleanField("last", page.isLast());
jsonGenerator.writeNumberField("totalPages", page.getTotalPages());
jsonGenerator.writeNumberField("totalElements", page.getTotalElements());
jsonGenerator.writeBooleanField("first", page.isFirst());
jsonGenerator.writeNumberField("numberOfElements", page.getNumberOfElements());
jsonGenerator.writeObjectField("sort", page.getSort());
jsonGenerator.writeNumberField("number", page.getNumber());
jsonGenerator.writeNumberField("size", page.getSize());
jsonGenerator.writeBooleanField("empty", page.isEmpty());
jsonGenerator.writeEndObject();
}
}
}
register custom serializer to object mapper
@Singleton
public class CustomObjectMapper implements ObjectMapperCustomizer {
@Override
public void customize(ObjectMapper objectMapper) {
SimpleModule module = new SimpleModule();
module.addSerializer(Page.class, new PageSerializer());
objectMapper.registerModule(module);
}
}
Result:
- paging works both in jvm and native mode with Page<> as return type in RestService
@GuentherJulian should this be sufficient? We can create another issue to refactor the sample app.
from devon4quarkus.
@GuentherJulian should this be sufficient? We can create another issue to refactor the sample app.
Great! Yes, please create a following task to refactor the rest service.
from devon4quarkus.
Refactoring the sample app should follow by this issue
from devon4quarkus.
It looks ok for me
from devon4quarkus.
Related Issues (20)
- Add guide for naming and structural conventions
- Add guide for monitoring HOT 1
- Add guide for testing HOT 4
- Add guide for validation HOT 1
- Add guide on how to create a devon4quarkus application HOT 1
- Create quarkus sample app for DevOps tests
- Add DB to quarkus sample app for DevOps tests HOT 2
- Add guide for using spring-data in a quarkus application HOT 2
- Add guide for devon4quarkus application architecture HOT 2
- Epic: Quarkus Roadmap 2021
- Add guide for access control HOT 2
- Remove unnecessary classes in quarkus sample app
- Evaluate how to simplify migrations from Spring applications to Quarkus
- Add guide for bean mapping HOT 2
- Add guide for CORS support HOT 1
- Add guide for DAOs HOT 2
- Add guide for ORM and JPA
- Add guide for asynchronous communication with Apache Kafka HOT 2
- Add guide for logging
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from devon4quarkus.