4 ms·
Do you really need to write a controller and all its actions for each resource with Jersey?
by elchief 12y ago
Do you really need to write a controller and all its actions for each resource with Jersey?
- elchief 12y agoI ask because with Spring Data REST, you don't
- logn 12y agoFor 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(); }
- elchief 12y agoThanks, but I was referring to say a dynamic database-backed resource. 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.