es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

WireMock. Cómo escribir JSONPath correctamente para un arreglo. En WireMock, JSONPath se utiliza para seleccionar y extraer datos de un arreglo en un objeto JSON. Aquí hay algunas pautas para escribir JSONPath de manera adecuada para un arreglo: 1. Para acceder a un elemento específico en el arreglo, utiliza el índice entre corchetes. Por ejemplo, “$.arreglo[0]” seleccionará el primer elemento del arreglo. 2. Para seleccionar varios elementos, utiliza el operador de rango “:”. Por ejemplo, “$.arreglo[0:2]” seleccionará los primeros dos elementos del arreglo. 3. Si deseas seleccionar el último elemento del arreglo, utiliza el índice “-1”. Por ejemplo, “$.arreglo[-1]” seleccionará el último elemento. 4. Si necesitas seleccionar todos los elementos del arreglo, utiliza el comodín “*”. Por ejemplo, “$.arreglo[*]” seleccionará todos los elementos del arreglo. 5. También es posible utilizar condiciones para seleccionar elementos específicos en el arreglo. Por ejemplo, “$.arreglo[?(@.propiedad == ‘valor’)]” seleccionará todos los elementos del arreglo que cumplan con la condición de tener una propiedad con un valor específico. Recuerda que los nombres de las propiedades y los valores en JSONPath son sensibles a mayúsculas y minúsculas. Asegúrate de utilizar una sintaxis correcta y revisar la documentación de WireMock para más información sobre cómo escribir JSONPath para arrays. ¡Espero que esta guía te sea útil en la escritura de JSONPath para arreglos en WireMock!

Tengo una solicitud con un cuerpo como se muestra a continuación:

"RequestBody": {
    "numbers": ["20030013", "10010701", "10006402"]
}

Y estoy tratando de atrapar la solicitud anterior con Wiremock de la siguiente manera:

{
    "request": {
        "urlPattern": "<my_url_com>",
        "method": "POST",
        "bodyPatterns": [
            {
                "matchesJsonPath": "$.RequestBody[?(@.numbers == ['10010701'])]"
            }
        ]
    },
    "response": {
        "status": 200,
        "jsonBody": {
            "ResponseBody": {
                ...
            }
        }
    }
}

Porque solo me interesa cuando la solicitud contiene “10010701”.

Pero solo funciona si numbers contiene solo un valor.
Entonces, ¿cómo puedo capturar esta solicitud con varios valores?

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para capturar la solicitud con múltiples valores, puedes utilizar la siguiente expresión de jsonpath:

    $.RequestBody.numbers[?(@ == '10010701' || @ == 'some_other_number')]
    

    Esta expresión coincidirá con cualquier solicitud donde el campo numbers en RequestBody contenga los valores '10010701' o 'some_other_number'.

    Puedes incorporar esta expresión al campo matchesJsonPath en el patrón del cuerpo de la configuración de Wiremock de la siguiente manera:

    {
        "request": {
            "urlPattern": "<my_url_com>",
            "method": "POST",
            "bodyPatterns": [
                {
                    "matchesJsonPath": "$.RequestBody.numbers[?(@ == '10010701' || @ == 'some_other_number')]"
                }
            ]
        },
        "response": {
            "status": 200,
            "jsonBody": {
                "ResponseBody": {
                    ...
                }
            }
        }
    }
    

    Esto debería coincidir con cualquier solicitud donde numbers contenga al menos uno de los valores especificados.

Comments are closed.