Skip to content

Commit 0982c05

Browse files
committed
Added SerializedResponseTransformer. It changes the response by the Accept header
1 parent afba948 commit 0982c05

File tree

2 files changed

+58
-4
lines changed

2 files changed

+58
-4
lines changed

src/main/java/org/javawebstack/framework/WebApplication.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,17 +14,16 @@
1414
import org.javawebstack.framework.command.crypto.HashCommand;
1515
import org.javawebstack.framework.command.db.MigrateCommand;
1616
import org.javawebstack.framework.command.db.SeedCommand;
17+
import org.javawebstack.framework.command.schedule.WorkCommand;
1718
import org.javawebstack.framework.config.Config;
1819
import org.javawebstack.framework.module.Module;
1920
import org.javawebstack.framework.seed.AllSeeder;
2021
import org.javawebstack.framework.seed.MergedSeeder;
2122
import org.javawebstack.framework.seed.Seeder;
2223
import org.javawebstack.framework.util.*;
2324
import org.javawebstack.httpserver.HTTPServer;
24-
import org.javawebstack.httpserver.transformer.response.JsonResponseTransformer;
2525
import org.javawebstack.injector.Injector;
2626
import org.javawebstack.injector.SimpleInjector;
27-
import org.javawebstack.orm.ORM;
2827
import org.javawebstack.orm.Repo;
2928
import org.javawebstack.orm.exception.ORMConfigurationException;
3029
import org.javawebstack.orm.wrapper.MySQL;
@@ -140,8 +139,8 @@ public WebApplication() {
140139
injector.inject(this);
141140
server.beforeInterceptor(new CORSPolicy(config.get("http.server.cors", "*")));
142141
server.beforeInterceptor(new MultipartPolicy(config.get("http.server.tmp", null)));
143-
if (config.isEnabled("http.server.json", true))
144-
server.responseTransformer(new JsonResponseTransformer().ignoreStrings());
142+
if (config.isEnabled("http.server.autoserialization", true))
143+
server.responseTransformer(new SerializedResponseTransformer().ignoreStrings());
145144
if (sql != null)
146145
server.routeParamTransformer(modelBindParamTransformer);
147146
modules.forEach(m -> m.beforeSetupServer(this, server));
@@ -169,6 +168,9 @@ public WebApplication() {
169168
commandSystem.addCommand("generate", new MultiCommand()
170169
.add("key", new GenerateKeyCommand())
171170
);
171+
commandSystem.addCommand("schedule", new MultiCommand()
172+
.add("work", new WorkCommand())
173+
);
172174
}
173175

174176
public Map<String, Seeder> getSeeders() {
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
package org.javawebstack.framework.util;
2+
3+
import org.javawebstack.abstractdata.AbstractMapper;
4+
import org.javawebstack.abstractdata.NamingPolicy;
5+
import org.javawebstack.httpserver.Exchange;
6+
import org.javawebstack.httpserver.transformer.response.ResponseTransformer;
7+
8+
public class SerializedResponseTransformer implements ResponseTransformer {
9+
private final AbstractMapper mapper;
10+
private boolean ignoreStrings;
11+
12+
public SerializedResponseTransformer() {
13+
this((new AbstractMapper()).setNamingPolicy(NamingPolicy.SNAKE_CASE));
14+
}
15+
16+
public SerializedResponseTransformer(AbstractMapper mapper) {
17+
this.ignoreStrings = false;
18+
this.mapper = mapper;
19+
}
20+
21+
public SerializedResponseTransformer ignoreStrings() {
22+
this.ignoreStrings = true;
23+
return this;
24+
}
25+
26+
public String transform(Exchange exchange, Object object) {
27+
if (object instanceof byte[]) {
28+
return null;
29+
} else {
30+
if (this.ignoreStrings && object instanceof String)
31+
return null;
32+
String accept = exchange.header("Accept");
33+
34+
if (accept != null) {
35+
switch (accept.toLowerCase()) {
36+
case "application/x-yaml":
37+
case "application/yaml":
38+
case "text/yaml":
39+
case "text/x-yaml":
40+
exchange.contentType(accept);
41+
return this.mapper.toAbstract(object).toYaml();
42+
case "application/x-www-form-urlencoded":
43+
exchange.contentType(accept);
44+
return this.mapper.toAbstract(object).toFormDataString();
45+
}
46+
}
47+
48+
exchange.contentType("application/json");
49+
return this.mapper.toAbstract(object).toJsonString();
50+
}
51+
}
52+
}

0 commit comments

Comments
 (0)