空指针问题的解决思路请教

最近编码遇到了一个疑惑,业务代码包括同事的经常发生空指针报错(正常有值的时候不会,但是开发环境数据混乱,测试的时候就经常发生了)。
那么是不是每个方法都需要对其入参进行判null呢?
比如下面的每个方法都需要对入参进行判null:

private void xxx(Map<String, Object> map) {

    if(map != null) {
        Object value = map.get("key");
    }
}

private void xxx(List<String> list) {

    if(list != null && list.size() > 0) {
        list.get(0);
    }
}

private void xxx(String str) {

    if(str != null) {
        str.indexOf(".");
    }
}

因为方法是无法保证入参绝对不是null的,但是这样做就会导致到处都是判null的代码,很丑陋。
请问各位是如何应对的

public修饰的方法最好都判断,可以直接判断,或者Assert类的方法、或者使用非空注解、或者用Optional的方法。private修饰的方法,不对外,调用地是已经知道的,调用地做好保证就好了,不需要都判断

1.是不是每个方法都需要对其入参进行判null呢
正常业务确实是需要这样的 。

工具类判断可能会好看一点儿

增加一个全局异常处理类,然后你的方法不需要if判断,直接使用即可,代码如下

@RestControllerAdvice
public class GlobalExceptionHandler extends ResponseEntityExceptionHandler {
    
    /**
     * 处理空指针的异常
     * @param req
     * @param e
     * @return
     */
    @ExceptionHandler(value =NullPointerException.class)
    @ResponseBody
    public HttpResult exceptionHandler(HttpServletRequest req, NullPointerException e){
        logger.info(e.getMessage());
        return HttpResult.error("参数不能为null!");
    } 
}

这个字段在业务上有什么意义,为什么会为空,先考虑这个再判断npe,有的是表面npe,其实是业务有问题