|
|
|
|
|
by logn
4412 days ago
|
|
For static resources you can load them like this: public class WebAppConfig extends ResourceConfig {
private final String[] mimeTypes;
public WebAppConfig() throws IOException {
//load static resource from htdocs dir
Collection<File> files = FileUtils.listFiles(new File("./htdocs"), null, true);
ArrayList<String> mimeTypeList = new ArrayList<String>();
for (File file : files) {
final byte[] contents = FileUtils.readFileToByteArray(file);
Resource.Builder resourceBuilder = Resource.builder();
resourceBuilder.path(file.getAbsolutePath().split("/htdocs/")[1]);
final ResourceMethod.Builder methodBuilder = resourceBuilder.addMethod("GET");
String mimeType = Files.probeContentType(Paths.get(file.toURI()));
if (!mimeTypeList.contains(mimeType)) {
mimeTypeList.add(mimeType);
}
methodBuilder.produces(mimeType)
.handledBy(new Inflector<ContainerRequestContext, byte[]>() {
@Override
public byte[] apply(ContainerRequestContext req) {
return contents;
}
});
registerResources(resourceBuilder.build());
}
//load dynamic resources implementing interface Webpage
register(MultiPartFeature.class);
Reflections reflections = new Reflections(new ConfigurationBuilder()
.setUrls(ClasspathHelper.forJavaClassPath())
.filterInputsBy(new FilterBuilder().include(FilterBuilder.prefix("com.example.mycompany"))));
Set<Class<? extends Webpage>> webpageClasses = reflections.getSubTypesOf(Webpage.class);
for (Class<? extends Webpage> webpageClass : webpageClasses) {
registerResources(Resource.builder(webpageClass).build());
}
mimeTypes = mimeTypeList.toArray(new String[0]);
}
public String[] mimeTypes() {
return mimeTypes;
}
}
...
public synchronized void start() throws Exception {
WebAppConfig config = new WebAppConfig();
HttpServer httpServer =
GrizzlyHttpServerFactory.createHttpServer(URL, config, false);
CompressionConfig compressionConfig =
httpServer.getListener("grizzly").getCompressionConfig();
compressionConfig.setCompressionMode(CompressionConfig.CompressionMode.ON);
compressionConfig.setCompressionMinSize(1);
compressionConfig.setCompressableMimeTypes(config.mimeTypes());
httpServer.start();
wait();
}
|
|
With SDR, you have an @Entity, and a @Repository for that entity, and SDR handles the whole HTTP part, i.e. you don't need to write a @Controller to expose the repository.
Just wondering if Jersey has anything similar.