首页 > 解决方案 > 为什么字符串返回为“4-5 u043Bu0435u0442 103-112 u0441u043C”?

问题描述

我正在开发从不同来源(REST API)收集数据并返回汇总数据的后端。

所以我从其中一个 API 请求数据。该 API 的响应(所有西里尔字符看起来都不错)描述为@Data class ProductSku {private string label; private boolean isInStock;}

[
   {
      //... omit lot of unused fields
      "label": "1 год 73-75 см",
      "isInStock": true
   },
   {
      //... omit lot of unused fields
      "label": "2 года 82-88 см",
      "isInStock": true
   }
]

然后我允许在我的后端端点的其他数据中请求它:

@GetMapping(path = "products/{prodId}", produces = {"application/json; charset=UTF-8","*/*;charset=UTF-8"})
    public ProductEntity getProduct(@PathVariable("prodId") int prodId) {
        return catalogService.getProduct(prodId);
    }
class CatalogService {
    public ProductEntity getProduct(int prodId) {
        // ...
        // ommited fill up result from other APIs 

        List<ProductData> productSkus = stockClient.getProductSkus(prodId);
        productEntity.addSkus(productSkus);

        return productEntity;
    }
}
class StockClient {

    public List<ProductSku> getProductSkus(int prodId) {
        // using restTemplate
        // querying by param productId

        ProductData[] productsData;
        try {
            var headers = new HttpHeaders();
            headers.set(HttpHeaders.CONTENT_TYPE, "application/json;charset=UTF-8");
            headers.set(HttpHeaders.PRAGMA, "no-cache");
            headers.set(HttpHeaders.CACHE_CONTROL, "no-cache");

            var uri = UriComponentsBuilder.fromHttpUrl(apiUrl).queryParam("productId", prodId).build().toUri();
            var requestEntity = RequestEntity.get(uri).headers(headers).build();
            productsData = restTemplate.exchange(requestEntity, ProductData[].class).getBody();

        } catch (...) { 
           //... 
        }

       // convert to list here
       return new Arrays.asList(productData);
    }
}
// ...

所以它回应我:

{
   // ...
   "skus": [
        {
            "size": "1 u0433u043Eu0434 73-75 u0441u043C",
            "inStock": true
        },
        {
            "size": "2 u0433u043Eu0434u0430 82-88 u0441u043C",
            "inStock": true
        }
    ]
    // ...
}

如您所见,而不是"2 года 82-88 см"我得到"2 u0433u043Eu0434u0430 82-88 u0441u043C"

来自其他 API 的西里尔符号正常显示。

我希望能得到你的帮助

标签: javajsonspringcharacter-encoding

解决方案


推荐阅读