0

當我的一個端點被訪問時,我會看到隨機的NullPointerException。在DispatcherServlet中丟失堆棧跟蹤的隨機NullPointerExceptions

我知道的NPE是什麼,但是請原諒,我有很多問題在這裏:

  • 問題,在每10000個電話也許曾經發生
  • 如果我重播相同的請求,第二次它工作好
  • 它看起來好像它沒有得到我的控制器中的代碼(沒有語句記錄)
  • 和,最討厭...我沒有一個堆棧跟蹤來幫助我找出問題。

這是它被記錄:

[p-nio-80-exec-4] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is java.lang.NullPointerException] with root cause 

java.lang.NullPointerException: null 

Annnnnd,僅此而已,僅此而已......

控制器的代碼相當straithforward,它看起來像這樣:

@RepositoryRestController 
@ResponseBody 
public class AnimalImportEndpoint { 

    @Inject 
    private animalImportService; 

    @RequestMapping(value = "/animals/import", method = RequestMethod.POST) 
    public AnimalImportResult import(@Valid @RequestBody Animal animal) { 
     return animalImportService.import(animal); 
    } 

    @ResponseStatus(value = HttpStatus.BAD_REQUEST, reason = "Illegal arguments") 
    @ExceptionHandler(IllegalArgumentException.class) 
    public void illegalArguments() { 
    } 
} 

由於Spring Data Rest還暴露了該類,因此使用@RepositoryRestController而不是@RestController註釋s /animals

任何關於如何解決這個問題的指針或建議?

編輯:其他有趣的事實,我用sleuth追蹤請求。當我得到這個NullPointerException異常,我可以看到,有我在日誌中沒有spanId/traceId ...

回答

1

添加此JVM參數來禁用堆棧跟蹤去除優化

-XX:-OmitStackTraceInFastThrow 
+0

感謝偉大的想法,沒知道這一點。 –