springboot中普通类注入yml中定义的参数,为什么会是null?

作者站长头像
站长
· 阅读数 6
public class PublishService
    extends Service
{

   
    @Value("${vnpt.url}")
    private static  String vnptUrl;
    static {
        URL url = null;
        WebServiceException e = null;
        try {
            url = new URL(vnptUrl+"?wsdl");
        } catch (MalformedURLException ex) {
            e = new WebServiceException(ex);
        }
        PUBLISHSERVICE_WSDL_LOCATION = url;
        PUBLISHSERVICE_EXCEPTION = e;
    }
.....以下代码省略

报错信息

javax.xml.ws.WebServiceException: java.net.MalformedURLException: no protocol: null?wsdl
    at com.haier.cosmo.wms.cp.out.service.service.printInvoiceService.PublishService.<clinit>(PublishService.java:34)
    at com.haier.cosmo.wms.cp.out.service.service.impl.sto.FgStoServiceImpl.printVNPT(FgStoServiceImpl.java:177)

yml配置

# vnpt
vnpt:
  url: https://aquavn-tt78admindemo.vnpt-invoice.com.vn/PublishService.asmx
回复
1个回答
avatar
test
2024-07-04

问题出在这个地方:private static String vnptUrl;。静态变量没办法直接通过@Value注入。你要先删除static关键字,让vnptUrl成为一个普通的实例变量。然后,PublishService类要是一个 Spring 管理的 Bean,方便 Spring 可以注入配置的值。如果你要vnptUrl是一个静态变量,你可以这样写:

@Value("${vnpt.url}")
public void setVnptUrl(String vnptUrl) {
    PublishService.vnptUrl = vnptUrl;
}

这样,Spring 就能正确地注入vnptUrl的值了。

回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容