Spring Rest Template如何去除请求体数组元素的引号?
解决方案
你的代码生成错误请求体的核心原因:使用MultiValueMap封装参数时,将JsonArray通过joinToString()转为了单个字符串,导致RestTemplate把这个字符串作为params数组的唯一元素,最终出现多余引号和转义。
以下是几种可行的修正方案:
方案1:用Map<String, Any>直接构建请求体
val headers = HttpHeaders() headers.contentType = MediaType.APPLICATION_JSON val paramsList = listOf(1, 124, "ABC") val requestBody = mapOf("params" to paramsList) val request = HttpEntity(requestBody, headers) val response = restTemplate.postForEntity( URL, request, String::class.java ) return response.body
RestTemplate会自动将Map序列化为正确的JSON结构,params对应包含数字和字符串的数组,不会产生多余引号。
方案2:用JsonNode构建完整请求体
val headers = HttpHeaders() headers.contentType = MediaType.APPLICATION_JSON val objectNode = ObjectMapper().createObjectNode() val arrayNode = objectNode.arrayNode() arrayNode.add(1) arrayNode.add(124) arrayNode.add("ABC") objectNode.set<JsonNode>("params", arrayNode) val request = HttpEntity(objectNode, headers) val response = restTemplate.postForEntity( URL, request, String::class.java ) return response.body
直接通过Jackson的ObjectNode构建完整JSON结构,确保params数组的元素类型准确,序列化后完全符合预期格式。
方案3:自定义数据类(推荐)
// 定义请求体数据类 data class RequestBody( val params: List<Any> ) // 业务代码中使用 val headers = HttpHeaders() headers.contentType = MediaType.APPLICATION_JSON val requestBody = RequestBody(listOf(1, 124, "ABC")) val request = HttpEntity(requestBody, headers) val response = restTemplate.postForEntity( URL, request, String::class.java ) return response.body
通过数据类明确请求结构,代码可读性和可维护性更强,RestTemplate会自动完成正确的JSON序列化。
内容的提问来源于stack exchange,提问作者J.Doe
相关产品推荐
相关产品推荐

