我收到一个java.util.missingformatargumentexception:java中的格式说明符“%s”错误

watbbzwu  于 2021-07-08  发布在  Java
关注(0)|答案(2)|浏览(1005)

我得到一个java.lang.runtimeexception:

java.util.MissingFormatArgumentException: Format specifier '%s' error in Java below is my stacktrace:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'transformToListClass': Invocation of init method failed; nested exception is java.lang.RuntimeException: java.util.MissingFormatArgumentException: Format specifier '%s'

Caused by: java.lang.RuntimeException: java.util.MissingFormatArgumentException: Format specifier '%s'

Caused by: java.util.MissingFormatArgumentException: Format specifier '%s'

我正在传递以下json文件:

{
"EcrionIntegration": {
  "HelloWord": "Hello World"
}
}

使用以下方法:

@PostConstruct
public ResponseEntity<InputStreamResource> tranform() {
    try {

        JSONParser parser = new JSONParser();
//Use JSONObject for simple JSON and JSONArray for array of JSON.
        JSONObject data = (JSONObject) parser.parse(new FileReader("C:\\Liver\\code\\HELLO_WORLD.json"));//path to the JSON file.

        String payLoad = data.toString();

        ImageDescriptor descriptor = ecrionService.generateImage(payLoad, "HELLO_WORLD");

        log.info(String.format("%s generateImage Result: [%s] ", descriptor.getFileName(), descriptor.getFileUrl()));
        System.out.print(descriptor.getFileName() + " " + descriptor.getFileUrl());

        String fileName = "ecrionlList.PDF";
        log.info(String.format("file name:", fileName));
        System.out.print("file name:" + fileName);
        descriptor.setFileName(fileName);

        InputStreamResource streamResource = new InputStreamResource(descriptor.getInputStream());
        return ResponseEntity.ok()
                .contentType(MediaType.parseMediaType(MediaType.APPLICATION_PDF_VALUE))
                .body(streamResource);

    } catch (Exception ex) {
        throw new RuntimeException(ex);
    }
}

}
它依次传递给以下方法并发送到服务器:

public ImageDescriptor generateImage(String payLoad, String templateName) {
    try {
        ImageDescriptor descriptor = new ImageDescriptor();

        String myEcrionUrl = "http://localhost:8013/v1/ecrion";
      String ecrionURL = myEcrionUrl.concat(Constant.F_SLASH).concat(templateName);

        log.info("payload" + payLoad);

        ResponseEntity<Resource> responseEntity = restTemplate.exchange(
                ecrionURL,
                HttpMethod.POST,
                ncbiService.getStringHttpEntityWithPayload(payLoad),
                Resource.class);
      log.info(String.format("%s generateImage Result: [%s] ", responseEntity.getBody().getInputStream()));
        descriptor.setInputStream(Objects.requireNonNull(responseEntity.getBody()).getInputStream());

        convert(responseEntity.getBody().getInputStream(), "sherrr.pdf");

        log.info("file is:"+ convert(responseEntity.getBody().getInputStream(), "sherrr.pdf"));

        return descriptor;
    } catch (IOException e) {
        e.printStackTrace();
        log.error(" generate image failed " + e.getMessage());
        throw new RuntimeException(e);
    }

 }
toiithl6

toiithl61#

log.info(String.format("%s generateImage Result: [%s] ", responseEntity.getBody().getInputStream()));

此格式有两个%s,但您只传递了一个参数。

hc2pp10m

hc2pp10m2#

正如您在文档string.format中看到的,它接受format string和vararg或参数。如果您查看格式化程序字符串文档,您可以在 % 有一堆参数可以用来格式化字符串。尤其是对于 %s 上面写着

's', 'S'    general If the argument arg is null, then the result is "null". If arg implements Formattable, then arg.formatTo is invoked. Otherwise, the result is obtained by invoking arg.toString().

所以您得到的错误是因为您告诉格式化程序字符串将格式化2个参数,而您只传递了其中一个

log.info(String.format("%s generateImage Result: [%s] ", responseEntity.getBody().getInputStream()));

所以你可以去掉第一个 %s :

log.info(String.format("generateImage Result: [%s] ", responseEntity.getBody().getInputStream()));

相关问题