Estoy desarrollando un controlador de API con la primavera.
Tengo dos tablas y que son relaciones de uno a muchos.
Un vídeo puede tener varios productos.
Puedo seleccionar la información de vídeo y de producto con consulta de combinación.
El resultado es selecto, como a continuación:
El JSON Lo que me gustaría es que el retorno a continuación:
{
"videos": [{
"video_id": "V0001",
"video_nm": "Video001",
"description": "Some text",
"thumbnail": "path/img/aaa.jpg",
"reg_dt": "11-30-2019",
"products": [{
"product_id": "P0001",
"product_nm": "Product001",
"description": "Some text",
"info_url": "http://product.com"
}, ...]
}, ...]
}
¿Es posible crear el anterior JSON con el resultado de la consulta? O debería cambiar el formato JSON?
Para dar formato JSON en MySQL, es necesario utilizar el JSON_OBJECT () la función y el () JSON_ARRAYAGG funciones.
Algo parecido a lo siguiente - pero no he probado.
SELECT JSON_OBJECT('videos', JSON_ARRAYAGG(vid_subquery.video)) AS videos
FROM (
SELECT
JSON_OBJECT(
'video_id', v.video_id,
'video_nm', v.video_nm,
'description', v.description,
'thumbnail', v.thumbnail,
'reg_dt', v.reg_dt,
'products', JSON_ARRAYAGG(
JSON_OBJECT(
'product_id', p.product_id,
'product_nm', p.product_nm,
'description', p.description,
'info_url', p.info_url
)
)
) AS video
FROM video AS v
LEFT OUTER JOIN product AS p ON p.video_id = v.video_id
GROUP BY v.video_id
) AS vid_subquery
Si eso parece demasiado difícil, entonces usted debe seguir los consejos en los comentarios y escribir un asignador de Java para hacerlo.