resttemplate.exchange 抛出空指针异常
resttemplate.exchange throws null pointer exception
restTemplate.postForEntity(url,entity, String.class);
ResponseEntity<String> response = restTemplate.exchange(url, HttpMethod.POST, entity, String.class);
尝试创建对象时抛出空指针异常。
我检查了实体和 url,它正在记录器消息中打印。但是在这一行它抛出空指针异常,但对象仍在创建中..
如果正在创建对象,这怎么会抛出空指针异常..
我正在使用 kubernetes,当我在 kubernetes 中检查命令行时它说对象已创建..但在日志中它显示空指针异常
问题似乎是您正在执行请求两次。
restTemplate.postForEntity(url, entity, String.class);
ResponseEntity<String> response = restTemplate.exchange(url, HttpMethod.POST, entity, String.class);
postForEntity
和 exchange
都向您的 url
发送 post 请求。 postForEntity
可以看作是 exchange
方法的一个特例。请参阅 documentation
请只使用其中一项,例如:
ResponseEntity<String> response = restTemplate.postForEntity(url, entity, String.class);
我遇到了类似的问题,并且已经解决了 2 天。下面是我的堆栈跟踪。
java.lang.NullPointerException
at java.nio.charset.Charset.put(Charset.java:538)
at java.nio.charset.Charset.access0(Charset.java:271)
at java.nio.charset.Charset.run(Charset.java:584)
at java.nio.charset.Charset.run(Charset.java:573)
at java.security.AccessController.doPrivileged(Native Method)
at java.nio.charset.Charset.availableCharsets(Charset.java:572)
at org.springframework.http.converter.StringHttpMessageConverter.getAcceptedCharsets(StringHttpMessageConverter.java:119)
at org.springframework.http.converter.StringHttpMessageConverter.writeInternal(StringHttpMessageConverter.java:103)
at org.springframework.http.converter.StringHttpMessageConverter.writeInternal(StringHttpMessageConverter.java:41)
根本原因在于 Charset class 中的 availableCharsets() 静态方法。其中一个字符集提供程序返回了一个空迭代器,下面的一段代码 i.hasNext() 抛出了一个空指针异常。
private static void put(Iterator<Charset> i, Map<String,Charset> m) {
while (i.hasNext()) {
Charset cs = i.next();
if (!m.containsKey(cs.name()))
m.put(cs.name(), cs);
}
}
如果回溯堆栈跟踪调用,StringHttpMessageConverter.writeInternal() 方法会检查 writeAcceptCharset 布尔值,然后从调用 Charset 静态方法的地方调用 getAcceptedCharsets()。要避免此调用,请添加以下行。
StringHttpMessageConverter stringHttpMessageConverter=new StringHttpMessageConverter(Charset.forName("UTF-8"));
stringHttpMessageConverter.setWriteAcceptCharset(false);
responseEntity=restTemplate.exchange(requestUrl.toString(), HttpMethod.GET,request, <your_class>.class);
restTemplate.postForEntity(url,entity, String.class);
ResponseEntity<String> response = restTemplate.exchange(url, HttpMethod.POST, entity, String.class);
尝试创建对象时抛出空指针异常。
我检查了实体和 url,它正在记录器消息中打印。但是在这一行它抛出空指针异常,但对象仍在创建中..
如果正在创建对象,这怎么会抛出空指针异常..
我正在使用 kubernetes,当我在 kubernetes 中检查命令行时它说对象已创建..但在日志中它显示空指针异常
问题似乎是您正在执行请求两次。
restTemplate.postForEntity(url, entity, String.class);
ResponseEntity<String> response = restTemplate.exchange(url, HttpMethod.POST, entity, String.class);
postForEntity
和 exchange
都向您的 url
发送 post 请求。 postForEntity
可以看作是 exchange
方法的一个特例。请参阅 documentation
请只使用其中一项,例如:
ResponseEntity<String> response = restTemplate.postForEntity(url, entity, String.class);
我遇到了类似的问题,并且已经解决了 2 天。下面是我的堆栈跟踪。
java.lang.NullPointerException
at java.nio.charset.Charset.put(Charset.java:538)
at java.nio.charset.Charset.access0(Charset.java:271)
at java.nio.charset.Charset.run(Charset.java:584)
at java.nio.charset.Charset.run(Charset.java:573)
at java.security.AccessController.doPrivileged(Native Method)
at java.nio.charset.Charset.availableCharsets(Charset.java:572)
at org.springframework.http.converter.StringHttpMessageConverter.getAcceptedCharsets(StringHttpMessageConverter.java:119)
at org.springframework.http.converter.StringHttpMessageConverter.writeInternal(StringHttpMessageConverter.java:103)
at org.springframework.http.converter.StringHttpMessageConverter.writeInternal(StringHttpMessageConverter.java:41)
根本原因在于 Charset class 中的 availableCharsets() 静态方法。其中一个字符集提供程序返回了一个空迭代器,下面的一段代码 i.hasNext() 抛出了一个空指针异常。
private static void put(Iterator<Charset> i, Map<String,Charset> m) {
while (i.hasNext()) {
Charset cs = i.next();
if (!m.containsKey(cs.name()))
m.put(cs.name(), cs);
}
}
如果回溯堆栈跟踪调用,StringHttpMessageConverter.writeInternal() 方法会检查 writeAcceptCharset 布尔值,然后从调用 Charset 静态方法的地方调用 getAcceptedCharsets()。要避免此调用,请添加以下行。
StringHttpMessageConverter stringHttpMessageConverter=new StringHttpMessageConverter(Charset.forName("UTF-8"));
stringHttpMessageConverter.setWriteAcceptCharset(false);
responseEntity=restTemplate.exchange(requestUrl.toString(), HttpMethod.GET,request, <your_class>.class);