解决 Could not write request: no suitable HttpMessageConverter found for request type [java.lang.Long]

这篇具有很好参考价值的文章主要介绍了解决 Could not write request: no suitable HttpMessageConverter found for request type [java.lang.Long]。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

项目场景:

业务服务通过RestTemplate调用文件上传服务。(

<java.version>1.8</java.version>
<spring.cloud.version>Hoxton.SR12</spring.cloud.version>
<spring.cloud.alibaba.version>2.2.9.RELEASE</spring.cloud.alibaba.version>
<spring.boot.version>2.3.12.RELEASE</spring.boot.version>


问题描述

由于restTemplate中引入了FormHttpMessageConverter消息转换器,在调用过程中,无法解析java.lang.Long类型,报错:org.springframework.http.converter.HttpMessageNotWritableException: Could not write request: no suitable HttpMessageConverter found for request type [java.lang.Long]

Controller:

/**
     * @description: 文件上传
     * @param file
     * @return
     * @throws
     * @author menshaojing
     * @date 2021/11/22 10:21
     */
    @PostMapping("/upload")
    @ApiOperation(value = "文件上传")
    public ResultVo upload(@RequestBody MultipartFile file, HttpServletRequest request) throws BaseException {
        return ResultUtils.success(supplementaryZuoyeService.upload(file, request));
    }
 

service:

 /**
     * @description: 文件上传
     * @param file
     * @return
     * @throws
     * @author menshaojing
     * @date 2021/11/18 15:51
     */
    public StorePathVo upload(MultipartFile file, HttpServletRequest request) {
        String filename = FileUtils.getFilename(file);
        String suffix = filename.substring(filename.lastIndexOf('.') + 1);
        //校验文件格式
        if (!"pdf".equalsIgnoreCase(suffix) && !"docx".equalsIgnoreCase(suffix) && !"doc".equalsIgnoreCase(suffix)) {
            throw new BaseException(201, "文件格式错误");
        }
        filename = filename.substring(0, filename.lastIndexOf('.')) + ".pdf";

        FileUploadRequest fileUploadRequest = new FileUploadRequest();
        fileUploadRequest.setObjtype(FastfileTypeEnum.ACTION_FILE.getCode());
        fileUploadRequest.setFilename(file.getOriginalFilename());
        fileUploadRequest.setMimeType(file.getContentType());
        fileUploadRequest.setFilesize(file.getSize());
        fileUploadRequest.setToken(request.getParameter("token"));

        StorePathVo storeVo = null;
        try {
            storeVo = fileServerUtils.fileUpload(fileUploadRequest, file);
        } catch (IOException e) {
            throw new BaseException(ResultEnum.UPLOAD_FILE_FAIL);
        }
        if (null == storeVo) {
            throw new BaseException(ResultEnum.UPLOAD_FILE_FAIL);
        }
      ''''''''''''''
        }
    }

FileServerUtils类:

    /**
     * @param fileUploadRequest
     * @throws BaseException
     * @Description: 跨服务调用文件服务器上传文件
     * @author menshaojing
     * @date 13:22 2020/7/9
     */
    private StorePathVo upload(FileUploadRequest fileUploadRequest, Resource resource) throws BaseException {
        MultiValueMap<String, Object> paramMap = new LinkedMultiValueMap<>(1);
         paramMap.add("filesize", fileUploadRequest.getFilesize());
        paramMap.add("filesize", fileUploadRequest.getFilesize());
        paramMap.add("gradeid", fileUploadRequest.getGradeid());
        paramMap.add("subjectid", fileUploadRequest.getSubjectid());
        paramMap.add("duration", fileUploadRequest.getDuration());
        paramMap.add("mimeType", fileUploadRequest.getMimeType());
        paramMap.add("nodeid", fileUploadRequest.getNodeid());
        paramMap.add("objtype", fileUploadRequest.getObjtype());
        paramMap.add("objid", fileUploadRequest.getObjid());
        paramMap.add("filename", fileUploadRequest.getFilename());
        paramMap.add("addflag", fileUploadRequest.getAddflag());
        paramMap.add("file", resource);

        HttpHeaders headers = new HttpHeaders();
        MediaType type = MediaType.parseMediaType("multipart/form-data; charset=UTF-8");
        headers.setContentType(type);
        HttpEntity<MultiValueMap<String, Object>> formData = new HttpEntity<>(paramMap, headers);

        Integer uploadflag = fileUploadRequest.getUploadflag();
        String uploadpath = defaultpath;
        if (uploadflag == 1) {
            uploadpath = fastpath;
        } else if (uploadflag == 2) {
            uploadpath = osspath;
        }
        String url =buildURL(RestConstant.fileService + uploadpath, null == fileUploadRequest.getToken() ? "" : fileUploadRequest.getToken());
        log.info("跨服务调用文件服务器上传>>>:url={}", url);
        ResultVo result = restTemplate.postForObject(url, formData, ResultVo.class);
        if (result.getCode() != 200) {
            throw new BaseException(205, "跨服务调用文件服务器上传文件有误!");
        }
        log.info("上传成功!!!");
        return JSONObject.parseObject(JSONObject.toJSONString(result.getData()), StorePathVo.class);
    }
 public static String buildURL(String orignalURL, String token) {

        if (!orignalURL.contains("?")) {
            return orignalURL + "?token=" + token;
        } else {
            return orignalURL + "&token=" + token;
        }

    }

FileUploadRequest 类:


import lombok.Data;

/**
 * @author menshaojing
 * @Description: 文件上传服务器参数封装
 * @date 13:33 2020/7/9
 */
@Data
public class FileUploadRequest {

    /**
     * 课本ID
     */
    private Integer bookid;
    /**
     * 时长
     */
    private Integer duration;
    /**
     * 年级ID
     */
    private Integer gradeid;
    /**
     * 章节ID
     */
    private Integer nodeid;
    /**
     * 类型
     */
    private Byte objtype;
    /**
     * 某资源ID,例如导学ID,作业ID,资源库ID等
     */
    @JsonFormat(shape = JsonFormat.Shape.STRING)
    private Long objid;
    /**
     * 科目ID
     */
    private Integer subjectid;
    /**
     * 文件类型
     */
    private String mimeType;
    /**
     * 文件大小
     */
    private Long filesize;
    /**
     * token
     */
    private String token;
    /**
     * 文件名
     */
    private String filename;
    /**
     * 不传默认新建fastfile记录,传0表示不操作fastfile表
     */
    private Integer addflag;
    /**
     * 上传方式 0 默认上传 1 fast上传 2 oss上传
     */
    private Integer uploadflag = 0;
}

解决 Could not write request: no suitable HttpMessageConverter found for request type [java.lang.Long],java,servlet,tomcat
上传服务实现的方法:

    public StorePathVo uploadFile(HttpServletRequest request, AbstractUpload abstractUpload) throws Exception {
        UserRelationInfo userInfo = (UserRelationInfo) request.getAttribute("user");
        StorePath storePath = null;
        String fileName = "";
        StorePathVo storePathVo = new StorePathVo();
        UploadFileRequest uploadFileRequest = new UploadFileRequest();
        String ext = "";
        try {

            StandardMultipartHttpServletRequest standardMultipartHttpServletRequest=
                    new  StandardMultipartHttpServletRequest(request);
            final Map<String, String[]> parameterMap = standardMultipartHttpServletRequest.getParameterMap();

            final MultiValueMap<String, MultipartFile> multiFileMap = standardMultipartHttpServletRequest.getMultiFileMap();

            for (Map.Entry<String,String[]> entry:parameterMap.entrySet()) {

                    String itemKey = entry.getKey();
                    String itemVal = entry.getValue()[0];
                    switch (itemKey) {
                        case "bookid":
                            uploadFileRequest.setBookid(Integer.parseInt(itemVal));
                            break;
                        case "nodeid":
                            uploadFileRequest.setNodeid(Integer.parseInt(itemVal));
                            break;
                        case "gradeid":
                            uploadFileRequest.setGradeid(Integer.parseInt(itemVal));
                            break;
                        case "subjectid":
                            uploadFileRequest.setSubjectid(Integer.parseInt(itemVal));
                            break;
                        case "duration":
                            uploadFileRequest.setDuration(Integer.parseInt(itemVal));
                            break;
                        case "objid":
                            uploadFileRequest.setObjid(Long.parseLong(itemVal));
                            break;
                        case "objtype":
                            uploadFileRequest.setObjtype(Byte.parseByte(itemVal));
                            break;
                        case "filesize":
                            uploadFileRequest.setFilesize(Integer.parseInt(itemVal));
                            break;
                        case "mimeType":
                            uploadFileRequest.setMimeType(itemVal);
                            break;
                        case "addflag":
                            uploadFileRequest.setAddflag(Byte.parseByte(itemVal));
                            break;
                        case "uuid":
                            uploadFileRequest.setUuid(itemVal);
                            if (!org.apache.commons.lang.StringUtils.isBlank(itemVal) &&
                                    redisTemplate.opsForValue().get(itemVal) == null) {
                                throw new BaseException(ResultEnum.NO_AUTHORITY_TO_OPERATE_RESOURCE);
                            }
                            break;
                        default:
                            break;
                    }

            }
            final Set<String> fileNames = multiFileMap.keySet();

            for (String file:fileNames) {
                if (uploadFileRequest.getFilesize() <= 0) {
                    throw new BaseException(ResultEnum.UPLOAD_FILE_ISEMPTY);
                }
                checkUploadFileSize(uploadFileRequest, request);
                final List<MultipartFile> multipartFiles = multiFileMap.get(file);
                for (MultipartFile multipartFile: multipartFiles) {
                    final InputStream inputStream = multipartFile.getInputStream();
                    if (inputStream != null) {
                        fileName =URLDecoder.decode(multipartFile.getOriginalFilename(), "UTF-8");;
                        ext = fileName.substring(fileName.lastIndexOf(".") + 1, fileName.length()).toLowerCase();

                        if (uploadFileRequest.getMimeType() == null) {
                            uploadFileRequest.setMimeType(multipartFile.getContentType());
                        }
                        if (null != abstractUpload) {
                            storePath = abstractUpload.uploadFile(inputStream, uploadFileRequest.getFilesize(), ext);
                        } else {
                            storePath = uploadAdapter.uploadFile(inputStream, uploadFileRequest.getFilesize(), ext);
                        }
                        inputStream.close();
                    }
                }

            }


        } catch (FileUploadException e) {
            throw (FileUploadException) e.getCause();
        } catch (IOException e) {
            throw new FileUploadIOException(new FileUploadException(String.format("Processing of %s request failed. %s",
                    ServletFileUpload.MULTIPART_FORM_DATA, e.getMessage()), e));
        } catch (Exception e) {
            log.error("上传文件失败,error:{}", e);
            throw new BaseException(ResultEnum.UPLOAD_FILE_FAIL);
        }

        if (null == storePath) {
            log.error("上传文件失败,storePath=null,uploadFileRequest:{}", uploadFileRequest);
            throw new BaseException(ResultEnum.UPLOAD_FILE_FAIL);
        }
        storePathVo.setFullPath(storePath.getFullPath());
        storePathVo.setPath(storePath.getPath());

        storePathVo.setHasDomainPath(fastDfsUploadUtils.getFastfileWebPath(storePath.getFullPath()));


        storePathVo.setCreatedAt(new Date());
        storePathVo.setGroup(storePath.getGroup());
        storePathVo.setFname(fileName);

        if (uploadFileRequest.getAddflag().equals((byte) 0)) {
            return storePathVo;
        }

        //写入数据库
        String tableName = "";
        Long objid = 0L;
        if (StringUtils.isNullOrBlank(uploadFileRequest.getUuid())) {
            tableName = tableUtil.getTableName(request, SplitTableNameEnum.FASTFILE.getSchema(), SplitTableNameEnum.FASTFILE.getName());
            objid = uploadFileRequest.getObjid();
        } else {
            tableName = tableUtil.getUUIDTableName(uploadFileRequest.getUuid());
            objid = (long) uploadFileRequest.getUuid().hashCode();
        }

        Fastfile fastfile = new Fastfile();
        fastfile.setFfid(IdWorker.getId());
        fastfile.setSchoolid(userInfo.getSchoolid());
        fastfile.setCampusid(userInfo.getCampusid());
        fastfile.setGradeid(uploadFileRequest.getGradeid());
        fastfile.setTermid(userInfo.getTermid());
        fastfile.setSubjectid(uploadFileRequest.getSubjectid());
        fastfile.setDuration(uploadFileRequest.getDuration());
        fastfile.setBookid(uploadFileRequest.getBookid());
        fastfile.setNodeid(uploadFileRequest.getNodeid());
        fastfile.setObjid(objid);
        fastfile.setObjtype(uploadFileRequest.getObjtype());
        fastfile.setCreateby(userInfo.getUid());
        fastfile.setFilesize(uploadFileRequest.getFilesize() / 1024);
        fastfile.setMimetype(uploadFileRequest.getMimeType());
        fastfile.setFname(fileName);
        fastfile.setRemark("");
//        if("cos".equals(storageType)) {
//            fastfile.setFullpath(ossUtils.converUrl(storePath.getFullPath(), fileName));
//        } else {
        fastfile.setFullpath(storePath.getFullPath());
//        }
        fastfile.setFgroup(storePath.getGroup());
        fastfile.setPath(storePath.getPath());
        fastfile.setCreatedAt(new Date());
        fastfile.setUpdatedAt(new Date());
        fastfile.setStatus((byte) 1);
        fastfile.setOriginalvideo((byte) 1);
        //fastfile.setCanplay((byte) 1);
        fastfileMapper.insertByTablename(fastfile, tableName);
        storePathVo.setFfid(fastfile.getFfid());
        return storePathVo;
    }


原因分析:

我们远程调用时设置的MediaType type = MediaType.parseMediaType(“multipart/form-data; charset=UTF-8”);,当restTemplate.postForObject(url, formData, ResultVo.class)调用时,代码跟踪至org.springframework.web.client.RestTemplate类的934行处,这里我们看到有调用相关的数据包装转换类,我们看构造函数中,注册好多转换类,这一块就会调用multipart/form-data类型的消息转换器,也就是FormHttpMessageConverter
解决 Could not write request: no suitable HttpMessageConverter found for request type [java.lang.Long],java,servlet,tomcat
这是我初始化的restTemplate,添加了FormHttpMessageConverter 。

  @Bean
    @LoadBalanced
    RestTemplate restTemplate(RestHeaderInterceptor restHeaderInterceptor) {
        RestTemplate restTemplate = new RestTemplate();
        restTemplate.setErrorHandler(new RestTemplateResponseErrorHandler());
         List<HttpMessageConverter<?>> messageConverters = restTemplate.getMessageConverters();
        List<HttpMessageConverter<?>> updateMessageConverters=new ArrayList<>();
        // restTemplate对中文格式数据进行处理 解决中文乱码 menshaojing 2023年3月21日13:16:09
        FormHttpMessageConverter formHttpMessageConverter = new FormHttpMessageConverter();
        partConverters.add(new ObjectToStringHttpMessageConverter(new DefaultConversionService(),StandardCharsets.UTF_8));
        formHttpMessageConverter.setPartConverters(partConverters);
        updateMessageConverters.add(formHttpMessageConverter);
        for (HttpMessageConverter<?> messageConverter : messageConverters) {
            if (messageConverter instanceof StringHttpMessageConverter) {
                 StringHttpMessageConverter stringHttpMessageConverter = new StringHttpMessageConverter(StandardCharsets.UTF_8);
                updateMessageConverters.add(stringHttpMessageConverter);
            }else {
                updateMessageConverters.add(messageConverter);
            }
        }
        restTemplate.setMessageConverters(updateMessageConverters);
        restTemplate.setInterceptors(Collections.singletonList(new RestTemplateTraceIdInterceptor()));
        restTemplate.setInterceptors(Collections.singletonList(restHeaderInterceptor));
        return restTemplate;
    }

然而FormHttpMessageConverter 中,对于数据字段转换仅支持byte[]、string、Resource的数据转换,没有我们常见的其他类型。
解决 Could not write request: no suitable HttpMessageConverter found for request type [java.lang.Long],java,servlet,tomcat
在进行源码分析时,发现有个类ObjectToStringHttpMessageConverter,这意思很明显就是将其他类型转换成string类型。我们再看它的构造函数,有一个必须参数ConversionService类(转换服务),

解决 Could not write request: no suitable HttpMessageConverter found for request type [java.lang.Long],java,servlet,tomcat
我们点进去看一下都有哪些实现类,发现有一个以Default开头的类DefaultConversionService
解决 Could not write request: no suitable HttpMessageConverter found for request type [java.lang.Long],java,servlet,tomcat
再次去查看DefaultConversionService的构造函数,发现它内置好多的数据转换类,这说明可以使用该类,进行各个类型之间的转换。
解决 Could not write request: no suitable HttpMessageConverter found for request type [java.lang.Long],java,servlet,tomcat
解决 Could not write request: no suitable HttpMessageConverter found for request type [java.lang.Long],java,servlet,tomcat

解决方案:

从原因分析中我们可以得知,只要在FormHttpMessageConverter中添加ObjectToStringHttpMessageConverter,ObjectToStringHttpMessageConverter中引入DefaultConversionService就可以实现其他类型数据转换成string类型。

解决方法1:

   @Bean
    @LoadBalanced
    RestTemplate restTemplate(RestHeaderInterceptor restHeaderInterceptor) {
        RestTemplate restTemplate = new RestTemplate();
        restTemplate.setErrorHandler(new RestTemplateResponseErrorHandler());
         List<HttpMessageConverter<?>> messageConverters = restTemplate.getMessageConverters();
        List<HttpMessageConverter<?>> updateMessageConverters=new ArrayList<>();
        // restTemplate对中文格式数据进行处理 解决中文乱码 menshaojing 2023年3月21日13:16:09

        FormHttpMessageConverter formHttpMessageConverter = new FormHttpMessageConverter();
        List<HttpMessageConverter<?>> partConverters = new ArrayList<>();
        partConverters.add(new ByteArrayHttpMessageConverter());
        partConverters.add(new StringHttpMessageConverter());
        partConverters.add(new ResourceHttpMessageConverter());
        // 解决org.springframework.http.converter.HttpMessageNotWritableException: Could not write request: no suitable HttpMessageConverter found for request type [java.lang.Long]...
        //将所有类型转换成string类型
        // menshaojing 2023年4月12日15:18:58
        partConverters.add(new ObjectToStringHttpMessageConverter(new DefaultConversionService(),StandardCharsets.UTF_8));
        formHttpMessageConverter.setPartConverters(partConverters);
        updateMessageConverters.add(formHttpMessageConverter);
        for (HttpMessageConverter<?> messageConverter : messageConverters) {
            if (messageConverter instanceof StringHttpMessageConverter) {
                 StringHttpMessageConverter stringHttpMessageConverter = new StringHttpMessageConverter(StandardCharsets.UTF_8);
                updateMessageConverters.add(stringHttpMessageConverter);
            }else {
                updateMessageConverters.add(messageConverter);
            }
        }
        restTemplate.setMessageConverters(updateMessageConverters);
        restTemplate.setInterceptors(Collections.singletonList(new RestTemplateTraceIdInterceptor()));
        restTemplate.setInterceptors(Collections.singletonList(restHeaderInterceptor));
        return restTemplate;
    }

解决方法2:
我直接从restTemplate初始化配置中删除FormHttpMessageConverter ,发现数据可以正常转换了,说明了restTemplate中其他内置的消息转换器也能对multipart/form-data类型的数据进行转换。文章来源地址https://www.toymoban.com/news/detail-759195.html

到了这里,关于解决 Could not write request: no suitable HttpMessageConverter found for request type [java.lang.Long]的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • [AxiosError]: There is no suitable adapter to dispatch the request since :- adapter xhr is not suppo

    [AxiosError]: There is no suitable adapter to dispatch the request since :- adapter xhr is not suppo

    最近在写一个node项目时,webpack打包之后运行打包的js文件报错:  [AxiosError]: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build     at we (C:UserslzzDocuments网盘脚本distbundle.js:2:32230)     at Ce.Se (C:Userslzz

    2024年02月03日
    浏览(9)
  • 解决Truffle搭建项目环境时候出现ExtendableError: Could not find suitable configuration file.

    解决Truffle搭建项目环境时候出现ExtendableError: Could not find suitable configuration file.

    首先,搭建区块链环境需要一个私有链或者公链,这里使用的是Ganache的quickstart 创建一个区块链实例。如下图:红色圈圈里面代表端口,配置truffle-config.js会用到。 第二步:利用truffle init命令创建一个项目时,一般出现的文件目录如下: . ├── contracts │ └── Migrations.

    2024年02月03日
    浏览(58)
  • 互联网大厂技术-HTTP请求-Springboot整合Feign更优雅地实现Http服务调用
no suitable HttpMessageConverter found for response type

    互联网大厂技术-HTTP请求-Springboot整合Feign更优雅地实现Http服务调用 no suitable HttpMessageConverter found for response type

    目录 一、SpringBoot快速整合Feign 1.添加Pom依赖 2.启动类添加注解 3.引用Feign服务 二、为请求添加Header的3种方式 1.添加固定header 2.通过接口签名添加header 3.动态添加header 三、为请求添加超时配置 1.默认超时时间 3.超时异常 4.全局超时配置 5.为单个服务设置超时配置 四、为请求配

    2024年02月11日
    浏览(6)
  • 解决pip安装python-jenkins模块报“Could not find suitable distribution for Requirement.parse(‘pbr‘)”的问题

    解决pip安装python-jenkins模块报“Could not find suitable distribution for Requirement.parse(‘pbr‘)”的问题

    相关版本: python-jenkins依赖pbr,其实还依赖six pip版本太低了,需要升级匹配版本 这是因为升级版本跨度太大导致的失败 解决办法:手动安装 安装成功 python2.7 pip 升级报错 def read(rel_path: str) -> str:

    2024年02月11日
    浏览(19)
  • postman 解决Could not send request

    postman 解决Could not send request

    最近在自学FastApi,因此初次使用postman进行接口测试。然后就遇到了下面的问题 直到学到了FastApi的CORS(跨域资源共享) 才弄明白这个问题。 也就是说,postman想要访问我的接口,必须列出允许访问的不同源地址(即做跨域处理)。以下是通过fastapi的 CORSMiddleware 的方式进行配

    2024年02月14日
    浏览(12)
  • Proxy error: Could not proxy request 解决方法

    1.后端相应的被代理服务器没有开启 2.代理规则写错,前后端部署的域名应一致; 3.没有把 vue.config.js 中的 before: require(\\\'./mock/mock-server.js\\\'), 注释掉,导致走代理前走了mockjs 4.URL前面不完整,没有http:// 5.dns解析有问题,可以把target:\\\'http://xxx\\\' 里面的网址换成ip 6.npm install portf

    2024年01月21日
    浏览(14)
  • Qt-解决异常报错“QAxBase::setControl: requested control XXX could not be instantiated”

    Qt-解决异常报错“QAxBase::setControl: requested control XXX could not be instantiated”

    作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处        使用Qt开发的过程中,QAxObject是经常用到的一个类,用于操作Windows中各种COM接口,进而实现各类功能。        WbemScripting.SWbemLocator是我想要通过QAxObject访问的对

    2024年02月12日
    浏览(9)
  • idea报“Could not autowire. No beans of ‘UserMapper‘ type found. ”错解决办法

    idea报“Could not autowire. No beans of ‘UserMapper‘ type found. ”错解决办法

    idea具有检测功能,接口不能直接创建bean的,需要用动态代理技术来解决。 1.修改idea的配置 1.点击file,选择setting 2.搜索inspections,找到Spring 3.找到Spring子目录下的Springcore 4.在Springcore的子目录下找到code 5.把seyerity选项改成警告 2.修改代码 1,@Autowrited改为@Autowrited(required = false)

    2024年02月05日
    浏览(12)
  • 解决SpringBoot项目中的报错:Could not autowire,no beans of “XXX“ type found

    解决SpringBoot项目中的报错:Could not autowire,no beans of “XXX“ type found

    问题:找不到mapper注入的bean,如图   分析:注入mapper有两种方式:  第一种:在启动类中添加  @MapperScan        然后在mapper的类中添加  @Repository 注解 第二种方法:直接在各个mapper类中添加@Mapper注解,但是一定要注意导入正确的包,否则解决不了这个异常;  很多新手

    2024年02月08日
    浏览(17)
  • 解决Git配置error:could not lock config file....No such file or directory

    解决Git配置error:could not lock config file....No such file or directory

    新安装git出现无法设置用户名和邮箱的方法。 $ git config --global user.name “用户名” $ git config --global user.email “邮箱” 当在git bash里设置用户名邮箱出现类似以下提示时的解决方法。 GIT error: could not lock config file C:/Users/FZQ/Desktop/%USERPROFILE%/…No such file or directory 这里说在我的电

    2024年02月06日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包