当前位置: 首页 > 知识库问答 >
问题:

是否可以更改响应主体的内容

司徒正信
2023-03-14

我正在尝试返回Json文件的内容。但是我想在将其发送到前端之前进行修改。我想在文件的开头和结尾添加“[”和“]”。我这样做是因为json文件有多个json根元素

例如,提取结果,如图所示

 result = restTemplate.executeRequest(HttpMethod.GET, String.class);
//change Body and put it back in result

问题

是否可以更改响应主体并将其放回ResponseEntity?

源代码

public ResponseEntity<String> getScalityObject(String chainCode, String dataCenter, String path, String byteRange) {
    Map<String, Object> queryParams = new HashMap<>();
    if (dataCenter != null && !dataCenter.isEmpty()) {
        queryParams.put("dataCenter", dataCenter);
    }
    if (byteRange != null && !byteRange.isEmpty()) {
        queryParams.put("byteRange", byteRange);
    }
    String decodedStr = URLDecoder.decode(path);
    queryParams.put("path", decodedStr);

    reservationService.setContext(
            RESA_INTERNAL_SERVICE_NAME,
            queryParams,
            "/chains/{chainCode}/objects/file",
            chainCode);
    restTemplate.setServiceDefinition(reservationService);
    
    ResponseEntity<String> result;
    try {
        result = restTemplate.executeRequest(HttpMethod.GET, String.class);
        //Change responseBody here
        return result;
    } catch (IOException e) {
        e.printStackTrace();
        result = new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
    }
    return result;
}
public <T> ResponseEntity<T> executeRequest(HttpMethod method, Class<T> responseType) throws IOException {

        if (this.serviceDefinition == null) {
            throw new IllegalArgumentException("You haven't provided any service definition for this call. " +
                "Are you sure you called the right method before using this Amadeus Rest Template?");
        }

        // Resolve the URI
        URI url = this.serviceDefinition.getUriComponents().toUri();

        // Add the extra headers if necessary
        HttpHeaders headers = new HttpHeaders();
        if (this.serviceDefinition.getHeaders() != null) {
            for(Map.Entry<String,String> headerSet : this.serviceDefinition.getHeaders().entrySet()) {
                headers.put(headerSet.getKey(), Arrays.asList(headerSet.getValue()));
            }
        }
        HttpEntity entity = new HttpEntity(headers);
        ResponseExtractor<ResponseEntity<T>> responseExtractor = responseEntityExtractor(responseType);

        RequestCallback requestCallback = httpEntityCallback(entity, responseType);
        ClientHttpResponse response = null;
        try {
            ClientHttpRequest request = createRequest(url, method);
            if (requestCallback != null) {
                requestCallback.doWithRequest(request);
            }
            response = request.execute();
            return (responseExtractor != null ? responseExtractor.extractData(response) : null);
        }
        catch (IOException ex) {
            throw ex;
        }
        finally {
            if (response != null) {
                response.close();
            }
        }

    }

共有1个答案

薛烨
2023-03-14

我能想到的一个方法是:

ResponseEntity<String> result = restTemplate.executeRequest(HttpMethod.GET, String.class);

StringBuilder builder = new StringBuilder(result.getBody());
... //do your transformation to stringbuilder reference.
result = ResponseEntity.status(ref.getStatusCode()).body(builder.toString());

如果要避免这种情况,另一种方法是从执行器请求返回字符串响应

 类似资料:
  • 但是我总是在方法中获得响应。因此,我尝试使用查看响应的错误主体。错误正文包含与原始响应完全相同的内容。 我用控制了response,看看我是否修改了我的响应类wright,它似乎可以。 为什么改型无法转换我的响应? 更新

  • 问题内容: 我正在尝试通过android应用程序中的改造连接到Rest服务。我正在得到回应。但是,当服务有一些错误响应时,就会发生转换异常,现在我想根据响应主体执行一些操作。但是我得到的响应主体为NULL。但是改造日志中有一条错误消息。为什么会这样。 码: 在这里,我得到的。不知道为什么 我是否需要使用rest适配器进行设置,以便将响应传递到改造错误对象。 问题答案: 试试这个代码: 与 Retr

  • 问题内容: 是否可以“监视”指令上的ui更改?像这样的东西: 问题答案: 是。您可以使用,如果你在属性利用插值。 但是,如果这不是一个插值属性,并且您希望它可以从应用程序中的其他位置更改(绝对不建议这样做,请阅读Common Pitfalls ),那么函数可以返回: 无论如何,对您来说最好的方法可能是更改更改元素类的代码。它何时更改?

  • 我试图只获得新版本的行已更改,而不是git diff显示的所有其他信息。 用于: 它显示: 我想看到的只是: 可能吗?

  • 例如: 用例1: 我想将上面的查询传递给一个实用工具类,该类将只使用不同的SELECT生成相同的查询,例如: 目前,我在应用程序代码中的查询构造时使用助手类来完成这一任务。我想把责任转移到一个库,这样它就可以透明地强制应用程序。 谢了。

  • 问题内容: 的 多重嵌套视图 功能非常好-您可以轻松地从应用程序的一种 状态 跳到另一种 状态 。 有时您可能想更改URL,但有时不需要。我觉得 状态 的概念应该与 route 分开/可选。 这是一个说明我意思的朋克。 这是文档中的一个小工具的分支,下面有2个小更改: 这似乎可行-URL保持不变。同样,这里做了多少多余的工作?这是经过批准/测试的用法吗? 如果您可以省略某个州的信息,那就太好了。