Personalizar manejadores REST existentes

Puede personalizar los manejadores de peticiones REST existentes mediante un mandato posterior al proceso.

Por qué y cuándo se efectúa esta tarea

Puede inyectar el mandato de postproceso personalizado para el mandato de REST existente mediante la anotación @ResourceHandlerPostprocessAnnotation.

Procedimiento

  1. Cree una interfaz de mandato personalizada que tenga @ResourceHandlerPostprocessAnnotation que se define de la manera siguiente.
    @ResourceHandlerPostprocessAnnotation(
    path="XXX",
    method="GET",
    query="param=value",
    accessCheck=true)
    public interface CustomPostCommand {
    ...
    }
    Donde
    path
    Necesario. Especifica la vía de acceso de la API de REST. Especifica la vía de acceso de la API de REST. La parte relevante de la vía de acceso es la cadena que sigue a storeId en la URI de la API de REST.
    method
    Necesario. Especifica el método de HTTP que se utilizará, que es GET, POST, PUT o DELETE.
    query
    Opcional. Especifique una cadena de consulta QPI de REST después de la vía de acceso. Por ejemplo, si una vía de acceso corta de la API de REST es self/usable_billing_address/{orderId}?q=nameXXX, puede añadir la consulta de REST a ResourceHandlerPostprocess utilizando el parámetro query="q=nameXXX".
    accessCheck
    Opcional. Especifique si el control de acceso es necesario para el mandato de controlador posterior al proceso. Si es true, la comprobación de control de acceso es necesaria. En todos los demás casos, la comprobación no se realiza. El valor predeterminado es false.
  2. Cree una clase de implementación de mandato personalizada, que amplíe ControllerCommandImpl e implemente la nueva interfaz personalizada creada.
    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. Reinicie el servidor y pruebe el mandato de postproceso al llamar a la API de REST correspondiente.

Ejemplo

A continuación, se muestran dos conjuntos de código de ejemplo. Ambos ejemplos muestran cómo utilizar los parámetros de solicitud y la respuesta original de las API de REST ampliadas.
Ejemplo 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);
   }
}
Ejemplo 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);
   }
}