This could be down to the jQuery request, rather than the ring middleware.
To be honest, I don't know much about jQuery, but I just came across this answer which looks like it could explain what's happening. In short, the data from your query as it stands will be encoded as strings in the URL. These will be parsed by ring into strings, not integers, as the URL encoding does not specify the type. If you want JSON encoding, you'll need to specify it explicitly. Like so:
$.ajax({
type: "POST",
url: 'http://localhost:9090/request',
data: JSON.stringify({type: 'add-request', val1: 12, val2: 50}),
contentType: 'application/json; charset=utf-8',
dataType: 'json',
success: function(data){
console.log(data);
});