Personnalisation des gestionnaires REST existants

Vous pouvez personnaliser les gestionnaires de requêtes REST existants à l'aide d'une commande de post-traitement.

Pourquoi et quand exécuter cette tâche

Vous pouvez injecter la commande de post-traitement personnalisée pour la commande REST existante à l'aide de l'annotation @ResourceHandlerPostprocessAnnotation.

Procédure

  1. Créez une interface de commande personnalisée qui a @ResourceHandlerPostprocessAnnotation défini comme suit.
    @ResourceHandlerPostprocessAnnotation(
    path="XXX",
    method="GET",
    query="param=value",
    accessCheck=true)
    public interface CustomPostCommand {
    ...
    }
    chemin
    Obligatoire. Spécifie le chemin d'accès de L'API REST. Spécifie le chemin d'accès de L'API REST. La partie pertinente du chemin d'accès est la chaîne qui suit storeId dans le reste de l'URI d'API.
    méthode
    Obligatoire. Spécifie la méthode HTTP à utiliser, qui est GET, POST, PUT, ou DELETE.
    query
    Facultatif. Spécifiez une chaîne de requête REST QPI après le chemin d'accès. Par exemple, si un chemin d'accès court d'API REST est self/usable_billing_address/{orderId}?q=nameXXX, vous pouvez ajouter la requête REST dans ResourceHandlerPostprocess à l'aide du paramètre query="q=nameXXX".
    accessCheck
    Facultatif. Spécifiez si le contrôle d'accès est nécessaire pour la commande de contrôleur de post-traitement. Si la valeur est définie sur true, la vérification du contrôle d'accès est nécessaire. Dans tous les autres cas, la vérification n'est pas effectuée. La valeur par défaut est false.
  2. Créez une classe d'implémentation de commande personnalisée, qui étend ControllerCommandImpl et implémente la nouvelle interface personnalisée créée.
    public class CustomPostCommandImpl extends ControllerCommandImpl implements CustomPostCommand {
    // Add the logic to get more customized info
    // Add the customized info into responseProperties
    // You can get request param by calling requestProperties.get("request")
    }
    
  3. Redémarrez le serveur et testez votre commande de post-traitement en appelant l'API REST correspondante.

Exemple

Voici deux ensembles d'exemples de code. Les deux exemples montrent comment utiliser les paramètres de requête et la réponse d'origine des API REST étendues.
Exemple A :
public class CreateSocialAccountCmdImpl extends ControllerCommandImpl implements CreateSocialAccountCmd {

   public void performExecute() throws ECException {
      System.out.println("CreateSocialAccountCmdImpl start...");

     HttpServletRequest requeset = (HttpServletRequest) requestProperties.get("request");
      Map<String, Object> bodyMap = (Map) requeset.getAttribute("resolvedBodyParams");
      Response originResponse = (Response) requeset.getAttribute("originResponse");

     String facebookId = (String) bodyMap.get("ext_facebookId");
      String facebookName = (String) bodyMap.get("ext_facebookName");

      Map map1=(Map)originResponse.getEntity();
      Map map2=(Map)map1.get("resultData");
      Long userId=Long.valueOf((String)map2.get("userId"));

      EntityDao<SocialAccount, Long> socialAccountDao = new SocialAccountDaoImpl();
      SocialAccount socialAccount = new SocialAccount();
      socialAccount.setFacebookId(facebookId);
      socialAccount.setName(facebookName);
      socialAccount.setMemberId(userId);
      socialAccount.setStoreId(Integer.valueOf(1));
      socialAccount.setSocialAccountId(socialAccountDao.generatePrimaryKey("xsocialaccount"));
      socialAccountDao.persist(socialAccount);

      System.out.println("CreateSocialAccountCmdImpl: bodyMap:" + bodyMap);
   }
}
Exemple B :
public class GetSocialAccountCmdImpl extends ControllerCommandImpl implements GetSocialAccountCmd {

   public void performExecute() throws ECException {

      System.out.println("GetSocialAccountCmdImpl start...");
      if (responseProperties == null) {
         responseProperties = new TypedProperty();
      }

      HttpServletRequest requeset = (HttpServletRequest) requestProperties.get("request");
      Response originResponse = (Response) requeset.getAttribute("originResponse");
      Map map1=(Map)originResponse.getEntity();
      List dataList=(List)map1.get("dataList");
      Map map2=(Map)dataList.get(0);
      ShowPersonDataAreaType person=(ShowPersonDataAreaType)map2.get("dataObject");
      System.out.println("person:"+person);
      PersonType personSDO=(PersonType)person.getPerson().get(0);
      Long memberId=Long.valueOf(personSDO.getPersonIdentifier().getUniqueID());

      EntityDao<SocialAccount, Long> socialAccountDao = new SocialAccountDaoImpl();
      List<SocialAccount> socialAccountList = socialAccountDao.query("SocialAccount.getSocialAccountsByMemberId", memberId);
      System.out.println("find socialAccount:" + socialAccountList);

      if(socialAccountList!=null && socialAccountList.size()>0){
         SocialAccount socialAccount=(SocialAccount)socialAccountList.get(0);
         if(socialAccount!=null){
            responseProperties.put("ext_facebookId", socialAccount.getFacebookId());
            responseProperties.put("ext_facebookName", socialAccount.getName());
         }
      }

      System.out.println("GetSocialAccountCmdImpl: responseProperties:" + responseProperties);
   }
}