Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

306
Visualizações
Servlet en AEM, se pierde el cuerpo en la solicitud POST

Creé una herramienta personalizada en AEM y quería que la herramienta personalizada llamara a un servlet (POST json).

Se llamó al servlet, pero request.getParameterMap() devolvió un mapa vacío.

Mi código de servlet es

 @Component( service=Servlet.class, property={ Constants.SERVICE_DESCRIPTION + "=Custom Servlet", "sling.servlet.methods=" + HttpConstants.METHOD_POST, "sling.servlet.paths=" + "/apps/myapp/customServlet" } ) public class CustomServlet extends SlingAllMethodsServlet{ @Override protected void doPost(SlingHttpServletRequest request, SlingHttpServletResponse response) throws IOException { String method = request.getMethod(); // method POST OK Map map = request.getParameterMap(); // return map but empty String name = request.getParameter("foo"); // also this return null response.setStatus(SlingHttpServletResponse.SC_OK); response.setContentType("application/json;charset=UTF-8"); response.getWriter().print("{\"response message\" : \"" + foo + "\"}"); } }

y mi código JS (cargado en la página de herramientas personalizadas de AEM como biblioteca cliente)

 window.onload = function() { var url = '/apps/myapp/customServlet'; var button = document.getElementById('btnSubmit'); button.addEventListener('click', event => { var foo = document.getElementById('foo').value; if (foo.length < 1){ alert("input required!!"); } else { var requestData = {}; requestData.foo= foo; console.log(requestData); // it is ok postData(url,requestData).then(data => {console.log(data);}); // got {response message:null} } }); } async function postData(url, data){ const response = await fetch(url, { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify(data) }); return response.json(); }

Además, eliminé POST en los métodos de filtro en Adobe Granite CSRF Filter Config.

¿Necesito alguna otra configuración OSGi o algún problema con mi código para usar Post Servlet en AEM?

about 4 years ago · Juan Pablo Isaza
2 Respostas
Responde à pergunta

0

Para obtener la carga útil del cuerpo de la solicitud, puede usar request.getReader()

Por ejemplo:

 String body = IOUtils.toString(request.getReader()); //apache commons io

O use algún mapeador json para obtener inmediatamente su objeto Java

 YourObject yourObject = new ObjectMapper().readValue(request.getReader(), YourObject.class); // jackson
about 4 years ago · Juan Pablo Isaza Relatório

0

estoy viendo

 var requestData = {}; // creating an empty array

y estás publicando esto en el servlet.

Creo que desea analizar 'foo' desde document.getElementById hasta el servlet.

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda