2016-11-29 5 views
0

Ich wollte meine vorhandene Rest-API erweitern oder anpassen. In meinem Rest ruft der Service den Handler auf, der Geschäftslogik enthalten soll (als Produkt), und ich brauche eine Möglichkeit, diese zu erweitern oder anzupassen (pro Client-Anpassung). Bitte geben Sie an, wie Sie dies tun können. Attached ist ein einfaches Hallo Welt-Setup, das ich habe, wäre es toll, es kann ein Haken in diesem 'DefaultGreetingsHandler.greetUser' angezeigt werden.Erweitern und Anpassen der vorhandenen REST-API

package com.myapi.greetings.rest; 

import javax.inject.Inject; 
import javax.servlet.http.HttpServletRequest; 
import javax.ws.rs.GET; 
import javax.ws.rs.Path; 
import javax.ws.rs.PathParam; 
import javax.ws.rs.Produces; 
import javax.ws.rs.core.Context; 
import javax.ws.rs.core.MediaType; 
import javax.ws.rs.core.Response; 

import com.myapi.greetings.handler.GreetingsHandler; 
import com.myapi.greetings.model.Greeting; 


@Path("/greetings") 
public class GreetingsService { 

    @Inject 
    GreetingsHandler handler; 

    @GET 
    @Path("/{name}") 
    public Response getCustomMessage(@PathParam("name") String name) { 
     String output = handler.greetUser(name); 

     return Response.status(200).entity(output).build(); 
    } 

} 

brauche ich einen Haken in der Handler.greetUser der Lage sein, pro Client in Java

package com.myapi.greetings.handler; 

import javax.inject.Inject; 

import com.myapi.greetings.dao.GreetingsDao; 

public class DefaultGreetingsHandler implements GreetingsHandler { 

    @Inject 
    GreetingsDao dao; 

    @Override 
    public String greetUser(String name) { 
     return dao.getGreeting() + name; 
    } 

} 

Sein ein einfaches Maven basiert Rest Projekt anpassen. Bitte beachten Sie den folgenden Link für die vollständige Setup-Zip-Datei.

https://1drv.ms/u/s!AulFHVWnSJeFaqIB0JHKzo95DbU

die Hilfe zu schätzen wissen.

+0

Warum ist 'DefaultGreetingsHandler' keine Rest-Methode? –

+0

Ich nehme an, das ist eine Schicht-Architektur, REST/Business-Logik/DAO. Auf diese Weise können Probleme der Geschäftslogik von REST-Anforderungen und Marshalling-Anforderungs-/Antwortobjekten getrennt werden. Ich bin jedoch verloren, was Ihre Frage ist, @Sudhi. –

+0

@Sander Verhagen, was ich suche, ist in der Lage, die Basis-Implementierung der GreetUser anpassen (enthält Geschäftslogik), die Client-spezifisch sein wird. Die Basisimplementierung ist mein Hauptprodukt und hat ein Standardverhalten, jetzt sollte ich bei meinen verschiedenen Clients das Standardverhalten für ihre (kundenspezifischen) benutzerdefinierten Implementierungen ändern können, die sich in einer anderen Codebasis befinden. – Sudhi

Antwort

0

Erstellen einer neuen Klasse MyApplicationBinder

import org.glassfish.hk2.utilities.binding.AbstractBinder; 

public class MyApplicationBinder extends AbstractBinder { 
    @Override 
    protected void configure() { 
     bind(GreetingsHandler.class).to(GreetingsHandler.class); 
    } 
} 

und es dann in der Hauptanwendungsklasse Registrieren

@ApplicationPath("webapi") 
public class MyApp extends ResourceConfig{ 
    public MyApp() { 
     register(new MyApplicationBinder()); 
     packages(true, "com.myapi.greetings.rest"); 
    } 
} 

Dies sollte Ihre Anwendung funktioniert.

+0

Meine Anwendung funktioniert, was ich suche, ist in der Lage, die Basisimplementierung des GreetUser (enthält Geschäftslogik) anzupassen, die Client-spezifisch sein wird. Die Basisimplementierung ist mein Hauptprodukt und hat ein Standardverhalten. Jetzt sollte ich bei meinen verschiedenen Clients das Standardverhalten für ihre benutzerdefinierten Implementierungen ändern können, die sich in einer anderen Codebasis befinden. – Sudhi

Verwandte Themen