springBoot 跨域/文件上传/邮件

2023-11-09

学习目标

  • 跨域请求
  • 文件上传
  • 邮件处理

跨域请求

1. 跨域怎么理解

跨域是什么?

跨域是指不同域名之间的相互访问,这是由浏览器的同源策略决定的,是浏览器对JavaScript施加的安全措施,防止恶意文件破坏。

同源策略:同源策略是一种约定,它是浏览器最核心的也是最基本的安全策略,如果缺少了同源策略,则浏览器的正常功能可能会受到影响。
所谓同源就是说协议域名端口号完全一致,有一个不一致就会造成跨域问题。

跨域原理:

  • 跨域请求能正常发出去,服务端能接受到请求并正常返回结果,只是结果被拦截了。
  • 跨域只存在于浏览器,不存在于其他平台,比如安卓/java/ios等平台。
  • 之所以会发生跨域是因为受到了同源策略的限制,同源策略要求源相同才能进行正常通信,即协议,域名,端口号都完全一致。

URL :统一资源定位符,它是www的统一资源定位标志,也就是我们说的网络地址。它的一般格式为:协议类型://服务器地址:端口号/路径。
这也就是我们说的跨域中的域。

2. SprinBoot中跨域的三种解决方法

跨域技术CORS

CORS是一个W3C标准,全称是"跨域资源共享"(Cross-origin resource sharing)。它允许浏览器向跨源服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制。

SpringBoot 就对Cross 做了很好的支持。目前有三种跨域方式。

1. CrossOrigin注解

//@CrossOrigin  表示所有的URL均可访问此资源
@CrossOrigin(origins = "http://127.0.0.1:8093")//表示只允许这一个url可以跨域访问这个controller
@RestController
@RequestMapping("/testCorss")
public class CorssOriginController {

    //可以对方法运用该注解
    //@CrossOrigin(origins = "http://127.0.0.1:8093")
    @GetMapping("/getString")
    public String getString(){
        return "跨域成功!";
    }

}

代码说明:@CrossOrigin这个注解用起来很方便,这个可以用在方法上,也可以用在类上。如果你不设置他的value属性,或者是origins属性,就默认是可以允许所有的URL/域访问。

  • value属性可以设置多个URL。
  • origins属性也可以设置多个URL。
  • maxAge属性指定了准备响应前的缓存持续的最大时间。就是探测请求的有效期。
  • allowCredentials属性表示用户是否可以发送、处理 cookie。默认为false
  • allowedHeaders 属性表示允许的请求头部有哪些。
  • methods 属性表示允许请求的方法,默认get,post,head。

2. 实现WebMvcConfigurer


public class MyWebMvcConfig implements WebMvcConfigurer {
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/testCross/**")
                .allowedHeaders("*")
                .allowedMethods("*")
                .allowCredentials(true)
                .allowedOrigins("http://localhost:8093")
                .maxAge(2000);
    }
}

这个没什么好说的,就重写addCorsMappings方法就行,配置好参数,参数和上面的注解的参数类似。这个配置属于全局配置,配置好了全部的接口都遵循此规则。上面的注解方式只对类或者方法生效。addMaping是设置对那种格式的URL生效,也就是跟在URL后面的路径。

3. 过滤器配置

import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;

@Configuration
public class Filter {
    @Bean
    public FilterRegistrationBean corsFilter() {
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        CorsConfiguration config = new CorsConfiguration();
        config.setAllowCredentials(true);
        config.addAllowedOrigin("http://localhost:8093");//*表示允许所有
        config.addAllowedHeader("*");
        config.addAllowedMethod("*");
        source.registerCorsConfiguration("/**", config); // CORS 配置对所有接口都有效
        FilterRegistrationBean bean = new FilterRegistrationBean(new CorsFilter(source));
        bean.setOrder(0);
        return bean;
    }

}

利用过滤器配置实现跨域,还有另外一种方法

package com.example.democrossorigin.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;

import javax.servlet.*;
import javax.servlet.FilterConfig;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@Configuration
public class CorssFilter implements Filter {

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
        HttpServletResponse res = (HttpServletResponse) response;
        res.addHeader("Access-Control-Allow-Credentials", "true");
        res.addHeader("Access-Control-Allow-Origin", "http://localhost:8093");
        res.addHeader("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT");
        res.addHeader("Access-Control-Allow-Headers", "Content-Type,X-CAF-Authorization-Token,sessionToken,X-TOKEN");
        chain.doFilter(request, response);
    }
    @Override
    public void destroy() {
    }
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
    }
}

3. 跨域测试

我们在新建一个SpringBoot web项目,然后在resources 文件夹里面的static 新建一个 .html
代码如下

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.js"></script>
</head>
<body>
<div id="test"></div>
<input type="button" value="测试数据" onclick="getString()"/>
</body>
<script>

    function getString() {
        $.ajax({
            url:'http://localhost:8092/testCorss/getString',
            type:'get',
            data:{},
            success:function (msg) {
                $("#test").html(msg);
            }
        })
    }
</script>
</html>

我们模拟一个ajax请求,来请求我们的8092端口,运行新的项目结果

在这里插入图片描述

点击测试,发起请求

在这里插入图片描述

成功从一个项目里面拿到了另外一个项目的数据,就说明我们的跨域是成功了的。

文件上传

1.项目搭建与配置

我们直接创建一个包含web依赖的项目就好了。然后需要在配置文件配置文件上传的一些设置。

server:
  port: 8095

spring:
  servlet:
    multipart:
      max-file-size: 10MB
      max-request-size: 30MB
  • max-file-size 设置能接受的文件最大的大小,记得是MB,或KB
  • max-request-size 设置一次上传的所有文件的大小。

默认大小为1MB

除了可以用配置文件配置还可利用java配置,如下

@Bean
public MultipartConfigElement multipartConfigElement() {
    MultipartConfigFactory factory = new MultipartConfigFactory();
    //上传的单个文件最大值   KB,MB 这里设置为10MB
    DataSize maxSize = DataSize.ofMegabytes(10);
    DataSize requestMaxSize = DataSize.ofMegabytes(30);
    factory.setMaxFileSize(maxSize);
    /// 设置一次上传文件的总大小
    factory.setMaxRequestSize(requestMaxSize);
    return factory.createMultipartConfig();
}

这个方法可以放在启动类里面,也可以自己放置在一个配置类里面,让项目启动的时候能正常加载就行。

2.文件上传

单文件上传,我们需要用后端接受并将文件存储到项目里面或者是自己定义路径。这里以图片作为上传的文件。并且将文件上传到项目里面。

@RestController
@RequestMapping("/file")
public class FileController {
    @PostMapping("/uploadFile")
    public String uploadFile(MultipartFile file, HttpServletRequest request)  {
        if (file.isEmpty()){
            return "上传的文件不能为空!请重新上传";
        }
        if (file.getSize()<=0){
            return "上传的文件大小需要大于0kb";
        }
        System.out.println(file.getContentType());//image/png
        Date date = new Date();
        Long time = date.getTime();
        String originFileName = file.getOriginalFilename();//获取文件原始的名称
        String newFileName = time+originFileName;
        //获取项目运行的绝对路径
        String filePath = System.getProperty("user.dir"); 

     
        // 父子类项目
        //String newFilePath = filePath+"\\当前项目名称\\src\\main\\resources\\static\\images\\";
        
        //单独项目
        String newFilePath = filePath+"\\src\\main\\resources\\static\\images\\";

        //当然你也可以自己设置一个绝对路径用于图片上传,文件上传。
        //比如说:D:\\images\\
        File file1 = new File(newFilePath);

        if (!file1.exists()){
            file1.mkdirs();
        }
        FileOutputStream fileOutputStream = null;
        try {
            fileOutputStream = new FileOutputStream(newFilePath+newFileName);
            fileOutputStream.write(file.getBytes());
            fileOutputStream.flush();
            fileOutputStream.close();
            return "localhost:8095/images/"+newFileName;
        } catch (java.io.IOException e) {
            e.printStackTrace();
        }
        return "上传失败";
    }
}

代码说明:

在代码里,我们可以利用参数file来判断这个文件是否为空,或者将这个文件的后缀名拿出来,判断这个文件的类型是否符合我们的要求,利用getContentType() 方法,如果你是上传的png图片,那么打印出来的就是image/png 其他类型的图片就是其他类型。我们为了区分图片,可以利用当前时间的getTime方法获得的数字来作为图片的前缀,也可以用其他的数字或者字符串。都不想说了,码字太累了。接下来获取当前项目运行的路径,后面加上我们需要上传的文件存储的位置,一般在resources文件下面。然后判断这个存储文件的文件夹是否存在,如果不存在就需要创建一个文件。然后利用字节流,将数据写到文件中,返回可访问的路径。

前端代码,我直接在static目录下面创建了一个upload.html文件,然后我们在文件里面写入一下内容

<p>单文件上传</p>
<form action="/file/uploadFile" method="POST" enctype="multipart/form-data">
    文件:<input type="file" name="file"/>
    <input type="submit" />
</form>

它的action对应了我们controller里面访问上传文件的对应的方法的路径,method属性是post,与后端一致。type为file的input框的name属性需要与controller里面的接受对象MultipartFile 一致,如果不一致的话后端无法接受到数据。如果你已经写好后端,而前端后端参数不一致,你可以给后端参数加上一个注解。@RequestParam(“file”) 这个注解放在MultipartFile的前面,这样即使你的参数名字不是file,也能正确接受到数据。

将文件上传之后,那个返回的路径应该是不能直接访问到图片的,会显示404,我们需可以添加以下配置。

@Configuration
public class ResourceConfigAdapter implements WebMvcConfigurer {


    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        //获取文件的真实路径
        String path = System.getProperty("user.dir")+"\\src\\main\\resources\\static\\images\\";
        String os = System.getProperty("os.name");
        if (os.toLowerCase().startsWith("win")) {
            registry.addResourceHandler("/images/**").
                    addResourceLocations("file:" + path);
        }

    }
}

这里的java动态配置比利用的yml的配置更灵活,在知道文件要存储的位置的情况下,可以自己在yml文件里面加配置。然后我们运行项目,如下:
在这里插入图片描述

上传一张图片,返回可访问的路径
在这里插入图片描述

然后我们将这个URL复制到浏览器,运行,就能访问图片了。

这是单文件上传,然后可能你需要做多文件上传,很简单,后端做一个循环就行了,然后利用MultipartFile的数组接受文件,对前端做一点修改。

 @PostMapping("/uploadFiles")
public String uploadFiles(MultipartFile[] files,HttpServletRequest request) {
    StringBuilder paths = new StringBuilder();
    for (MultipartFile file:files) {
        //中间的代码和上面的一样
        try {
            //这里根据实际情况修改,可以用数组
            paths.append("localhost:8095/images/"+newFileName+"\n");
        } catch (java.io.IOException e) {
            e.printStackTrace();
        }
    }
    return paths.toString();
}

前端稍微修改一下

<p>多文件上传</p>

<form action="/file/uploadFiles" method="POST" enctype="multipart/form-data">
    文件:<input type="file" name="files" multiple="multiple"/>
    <input type="submit"/>
</form>

这就完成了多文件的上传,在上传的时候你需要按住Ctrl键,然后选中多个文件,就能上传了。

邮件处理

1.SMTP协议简介

SMTP是一种提供可靠且有效的电子邮件传输的协议。SMTP是建立在FTP文件传输服务上的一种邮件服务,主要用于系统之间的邮件信息传递,并提供有关来信的通知。SMTP独立于特定的传输子系统,且只需要可靠有序的数据流信道支持,SMTP的重要特性之一是其能跨越网络传输邮件,即“SMTP邮件中继”。使用SMTP,可实现相同网络处理进程之间的邮件传输,也可通过中继器或网关实现某处理进程与其他网络之间的邮件传输。

简单来说:我们使用的这些邮件发送功能,他们之间都有一个专门的电子邮件的服务器,类似于邮局,你将邮件发给邮局,邮局又会根据你的邮寄地址发送给相应的邮局,然后接收方去邮局取邮件。而邮件服务器呢,就是互联网之间的一个邮局,不同的网络之间也能实现电子邮件的发送。

Spring框架在java邮件服务的基础上进行了封装,SpringBoot在Spring的基础上对邮件服务进一步的封装,让SpringBoot发送邮件更为便利,灵活。

2.开启SMTP服务并获取授权码

这里我们以QQ邮箱为例,要想在SpringBoot发送QQ邮件必须先打开QQ邮箱的SMTP功能,默认是关闭的,具体操作如下。进入邮箱→设置→账户,然后找到下面这个:
在这里插入图片描述

将第一个开启,这里我已经开启了,就不用再开启了,至于那个POP3协议,这是一种从邮件服务器上读取邮件的协议,通过POP3协议,收信人不需要参与到与邮件服务器之间的邮件读取过程,简化了用户操作. 收信人可以“离线”地进行邮件处理,很方便地接收,阅读邮件。

然后我们开启之后还需要获取一个授权码,这个授权码我们后面编写邮件配置需要用到。获取授权码可能需要验证身份什么的。将授权码保存下来。在这里插入图片描述

3.依赖导入与配置说明

依赖导入

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-mail</artifactId>
</dependency>

为了方便测试我们也需要将starter-web的依赖导入进来。

配置文件

spring:
  mail:
    host: smtp.qq.com
    username: 517022877@qq.com
    password: zxcvbnmkj
    properties:
      mail:
        smtp:
          socketFactory:
            class: javax.net.ssl.SSLSocketFactory
##         ssl:
##           enable :true
    default-encoding: utf-8

配置说明

  • host就是你的邮件服务器地址,
  • username就是你的邮箱账号,带上后缀
  • password就是你刚刚复制的授权码,我这里是乱写的;
  • default-encoding 设置邮件的编码为utf-8;
  • properties:额外的配置,这里我写了两个,只用其中一个就行了,开启ssl加密,保证安全连接。

3.邮件发送

1.简单邮件发送

编写controller,或者是直接在测试模块添加测试就行

@RestController
public class MailController {
    @Autowired
    JavaMailSenderImpl javaMailSender;
    @RequestMapping("/mail")
    public String sendMail(){
        SimpleMailMessage message = new SimpleMailMessage();
        //邮件设置
        message.setSubject("邮件主题");
        message.setText("邮件内容");
        message.setTo("xxxxxxx@139.com","111111111@qq.com");
        message.setFrom("qzstudynote@qq.com");
        javaMailSender.send(message);
        return "简单邮件发送成功!"
    }
}

代码说明JavaMailSenderImpl就是一个SpringBoot中用来发送邮件的一个实现类,我们需要将它注入到bean中,以供使用。它里面有一些方法,这里只展示了简单的几个,其他的也很简单,比如说发送日期,抄送人等等。接受者可以设置多个,如上。

2. 带附件内容和正文带图片的邮件发送

@RequestMapping("/mineMail")
public String sendMineMail() throws MessagingException {
     //1、创建一个复杂的邮件
        MimeMessage mimeMessage = javaMailSender.createMimeMessage();
        MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
        //邮件主题
        helper.setSubject("这是一个邮件啊");
        //文本中添加图片
        helper.addInline("image1",new FileSystemResource("D:\\images\\spring\\1.jpg"));
        //邮件内容
        helper.setText("<a href='https://www.cnblogs.com/swzx-1213/'>百度一下</a>    <img src='cid:image1'></img>",true);
        helper.setTo("xxxxx@139.com");
        helper.setFrom("517022877@qq.com");
        //附件添加图片
        helper.addAttachment("1.jpg",new File("D:\\images\\spring\\1.jpg"));
        //附件添加word文档
        helper.addAttachment("哈哈哈.docx",new File("D:\\images\\spring\\哈哈哈.docx"));

        javaMailSender.send(mimeMessage);
       return "复杂邮件发送!";
}

代码说明

  • 创建一个MimeMessage 邮件,但是我们也需要创建一个工具类MimeMessageHelper,相当于代理类吧,邮件的属性配置就由这个工具类来实现。
  • addInline(),第一个参数是一个contentId,String类型的,相当于是一个key,第二个参数是一个Resource对象,资源对象,这里我们传了一个本地的图片就用的FileSystemResource对象。当然这里是说的我们用的这个addInline方法的参数是这样,还有其他的参数类型,所谓重载。
  • setText(),这里用到的第一个参数就是文本字符串,第二个就是是否解析文本中的html语法。
  • addAttachment() 这个方法是用来添加附件的,附件和我们之前添加的图片不一样,附件作为一种未下载的文件,而资源文件则是直接显示到正文中。利用我自己的邮箱进行测试的截图:

在这里插入图片描述

3. thymeleaf模板作为邮件发送

项目中需要引入thymeleaf依赖,并且要在新建的html文件中加入:xmlns:th=“http://www.thymeleaf.org” ,不会thymeleaf的请移步之前的文章。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

这里在templates下面创建了一个email的html5文件。

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>

<p th:text="${name}"></p>
<a th:text="这是一个链接" th:href="${link}"></a>
<img th:src="${image1}">
</body>
</html>

controller中再添加一个方法。

@RequestMapping("/thyMail")
    public String sendThymeleafMail() throws MessagingException {
        MimeMessage mimeMessage = javaMailSender.createMimeMessage();
        MimeMessageHelper messageHelper = new MimeMessageHelper(mimeMessage);
        messageHelper.setSubject("这是一个thymeleaf模板邮件");
        messageHelper.setTo("xxxxxxxx@139.com");
        messageHelper.setFrom("517022877@qq.com");
        Context context = new Context();
        context.setVariable("name","这是一个新建的thymeleaf模板");
        context.setVariable("link","https://www.baidu.com");
        context.setVariable("image1","http://img12.360buyimg.com/babel/s1180x940_jfs/t1/155480/1/2178/40498/5f86d482E94d83a6e/1be5e41a4caf106b.jpg.webp");
        String value = templateEngine.process("email.html",context);
        messageHelper.setText(value,true);
        javaMailSender.send(mimeMessage);
        return "模板邮件发送成功";
    }

代码说明:

  • Context 属于org.thymeleaf.context这个包。
  • context.setVariable(),第一个参数是String,第二个是Object类型。第一个参数就对应thymeleaf模板上面相同名字的参数。
  • **templateEngine.process()**将指定路径的html文件转换成String类型返回。

测试:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

springBoot 跨域/文件上传/邮件 的相关文章

  • 在Java中将*s打印为三角形?

    我在 Java 课程中的作业是制作 3 个三角形 一份左对齐 一份右对齐 一份居中 我必须为什么类型的三角形制作一个菜单 然后输入需要多少行 三角形必须看起来像这样 到目前为止 我能够完成左对齐的三角形 但我似乎无法获得其他两个 我尝试用谷
  • ScheduledThreadPoolExecutor如何在特定时间运行任务?

    特别是 它是否像这样在内部实现了 while true 循环 while System currentTimeMillis lt timeToRunTask Thread sleep 1000 doTask From http grepco
  • 如何在 Java 中访问嵌套的 HashMap?

    我有一个 Java 中的 HashMap 其中的内容 你们可能都知道 可以通过以下方式访问 HashMap get keyname 如果一个 HashMap 位于另一个 HashMap 中 即嵌套的 HashMap 我将如何访问内容 我可以
  • 如何将现有的 SQLite3 数据库导入 Room?

    好吧 我在桌面上使用 SQLite3 创建了一个只需要读取的某些信息的数据库 我正在制作的应用程序不需要在此表中插入或删除信息 我在 Room 数据库层上做了相当多的谷歌搜索 所有文档都需要在构建应用程序时在 Room 中创建一个新的数据库
  • 需要正则表达式帮助

    我正在尝试替换两次或多次出现的 br like br br br 标签与两个一起 br br 具有以下模式 Pattern brTagPattern Pattern compile lt s br s s gt s 2 Pattern CA
  • 在 Junit 测试中使用 ReflectionTestUtils.setField()

    我是 JUnittesting 的新手 所以我有一个问题 谁能告诉我为什么我们使用ReflectionTestUtils setField 在我们的 Junit 测试示例中 正如评论中提到的 java 文档很好地解释了用法 但我还想给你们举
  • 关于Java泛型的一些问题

    假设我有以下接口和实现类 interface Foo
  • java.lang.Object的hashCode具体使用的算法是什么

    中使用的算法是什么JVM实施java lang Object的隐含的hashCode 方法 OpenJDK or Oracle JDK答案中首选 它依赖于实现 并且在很大程度上 该算法是entirely取决于实施 只要它是一致的 但是 根据
  • Java 中的 ExecuteUpdate sql 语句不起作用

    我正在学习如何将 SQL 与 Java 结合使用 我已成功安装 JDBC 驱动程序 并且能够从数据库读取记录并将其打印在屏幕上 我的问题发生在尝试执行更新或插入语句时 没有任何反应 这是我的代码 问题所在的方法 public static
  • 是否有最新的 Facebook Java SDK? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 好像没找到最近更新的 如果没有 是否有一个好的 Java 库来执行与 Facebook 的 API 交
  • 从 Android 访问云存储

    我一直无法找到任何有关如何从 Android 应用程序使用云存储的具体文档 我确实遇到过这个客户端库 https cloud google com storage docs reference libraries然而 Google Clou
  • Android 解析 JSON 卡在 get 任务上

    我正在尝试解析一些 JSON 数据 我的代码工作了一段时间 我不确定我改变了什么突然破坏了代码 当我运行代码时 我没有收到任何运行时错误或警告 我创建一个新的 AsyncTask 并执行它 当我打电话时 get 在这个新任务中 调试器在此行
  • 多线程——更快的方法?

    我有一堂有吸气剂的课程getInt 和一个二传手setInt 在某个领域 比如说领域 Integer Int 一个类的一个对象 比如说SomeClass The setInt 这里是同步的 getInt isn t 我正在更新的值Int来自
  • 如何检查日期字符串的有效性?

    在我的项目中 我需要检查日期字符串是否计算为正确的日期对象 我决定允许 yyyy MM dd 和日期格式 年 月 日 和 年 月 日 小时 分钟 我如何检查它们是否有效 我的代码为 1980 01 01 和一些奇怪的日期 如 3837 05
  • Android项目中使用java获取电脑的IP地址

    我在用ksoap2 android http code google com p ksoap2 android 我需要使用java获取IP地址 这样我就不必每次都手动输入它 我所说的 IP 地址是指 例如 如果我这样做ipconfig使用命
  • android 中的 java.net.URL ..新手问题

    我是java新手 正在尝试android开发 以下代码生成 malformedURLException 有人可以帮助我识别异常吗 任何提示都会非常有帮助 package com example helloandroid import and
  • 在 Freemarker 模板中检查 Spring 安全角色和记录的用户名

    有谁知道 freemarker 标签来检查 freemarker 文件中的 spring 安全角色和用户名 我从网络上的几个资源中发现以下代码将打印登录的用户名 但它没有打印用户名 而是打印 登录为
  • CXF:通过 SOAP 发送对象时如何排除某些属性?

    我使用 Apache CXF 2 4 2 当我将数据库中的某个对象返回给用户时 我想排除一些属性 例如密码 我怎样才能做到这一点无需创建临时的班级 有这方面的注释吗 根据 tomasz nurkiewicz 评论我应该使用 XmlTrans
  • Java 中的微分方程

    我正在尝试用java创建一个简单的SIR流行病模型模拟程序 基本上 SIR 由三个微分方程组定义 S t l t S t I t l t S t g t I t R t g t I t S 易感人群 I 感染人群 R 康复人群 l t c
  • 如何使用注释处理 Hibernate 和 Spring 中的连接查询?

    我正在使用 Spring 和 Hibernate 以及 MySQL 开发应用程序 我是 Hibernate 新手 完成了基本任务 现在我需要在选择查询中应用联接以使用注释从多个表中获取数据 我已经搜索过但仍然没有任何想法 这是我的数据库表和

随机推荐

  • 百度搜索jquery自动完成补全插件autocomplete

    百度搜索框效果 这东西有个 专用的插件 jquery自动补全插件autocomplete js 专治这个 我也是才知道 真是孤陋寡闻 jQuery Autocomplete实现自动完成功能 搜索提示功能 罗曼飞羽 博客园 这里有讲 jque
  • 类型转换与运算符

    一 自动转换 隐士转换 当小范围数据向大范围数据转换时 会发生自动转换 二 强制转换 占内存大的数据向占内存小的转换时 会发生强制转换 如 int a 1 三 运算符 1 关系运算符 2 逻辑运算符 3 算术运算符 4 赋值运算符 5 字符
  • 基于深度学习lstm_基于LSTM的深度恶意软件分析

    基于深度学习lstm Malware development has seen diversity in terms of architecture and features This advancement in the competen
  • mac 环境安装Libpng

    采用brew的安装方式如果没有brew需要先安装brew 如果是第一次用brew安装软件 在安装Libpng 之前要先运行下 brew install xz 否则会报错 如果运行brew install xz 报错 是因为 usr loca
  • ubuntu install phabricator with nginx

    Installing Required Components If you are installing on Ubuntu or an RedHat derivative there are install scripts availab
  • android init.rc文件语法详解

    初始化语言包含了四种类型的声明 Actions 行动 Commands 命令 Services 服务 和Options 选项 基本语法规定 1 所有类型的语句都是基于行的 一个语句包含若干个tokens token之间通过空格字符分隔 如果
  • 干货!Jenkins下配置findbugs、pmd及checkstyle实现代码自动检测

    配置前提 对于maven项目来说 需要在pom xml文件的
  • 小程序项目实战(一)

    项目名称 音乐小程序项目 讲师 coderwhy 学习链接 小程序音乐项目开发实战 大神coderwhy新课 学习视频教程 腾讯课堂课程简介https ke qq com course 4162214 此博客用来总结自己学习小程序开发的知识
  • PCL 查看点云数据中包含的属性信息

    目录 一 概述 1 主要函数 2 算法源码 二 代码实现 三 结果展示 一 概述 PCL中自带的调用函数可直接查看点云数据中包含的有效属性信息 如RGB XYZ 法向量等 以下代码展示如何进行获取 1 主要函数 pcl getFieldsL
  • Github标星超级牛,免费又好用的Redis客户端工具!

    RedisDesktopManager 以前一直使用的是RedisDesktopManager这款Redis客户端工具 由于很久 这个工具大家相对不陌生了 也很多人都使用过了 RedisLettuceClient 他的界面这样 熟悉不 而且
  • 嵌入式CGI开发之旅——CGI环境变量

    嵌入式CGI开发之旅 CGI环境变量 WEB服务器和CGI FastCGI程序之间交流信息的主要途径是环境变量 以及标准输入输出流 这里说的环境变量是指操作系统中的环境变量 windows系统下 PATH是很常见的一个环境变量 CGI规范对
  • [高光谱]PyTorch使用CNN对高光谱图像进行分类

    项目原地址 Hyperspectral Classificationhttps github com eecn Hyperspectral ClassificationDataLoader讲解 高光谱 使用PyTorch的dataloade
  • Android:ViewPager2

    简介 ViewPager2内部使用RecyclerView实现 并提供了增强功能 特性 支持水平 垂直方向布局 android orientation vertical 支持从右到左 android layoutDirection rtl
  • pysot-master-train.py 运行记录

    pysot master training dataset coco readme md 根据readme进行操作 先下载coco数据集压缩包 解压 cd pycocotools make cd 这一步必须执行 先将连个py文件中的路径 d
  • Redis有哪些慢操作

    redis 数据类型与底层数据结构的关系 可以看到 String 类型的底层实现只有一种数据结构 也就是简单动态字符串 而 List Hash Set 和 Sorted Set 这四种数据类型 都有两种底层实现结构 通常情况下 我们会把这四
  • linux下恢复win10启动,重装win10后原来的ubuntu系统启动项丢失恢复方式

    windows系统在重装的时候总是把MBR重写了 重装windows后无法找到ubuntu的引导 然后插上你制作好的U盘 重启电脑 当然你得先设置好你得电脑首先是从你得U盘启动 如何设置 请按自己电脑的型号自己百度 进入U盘的ubnutu系
  • python使用pandas实现筛选功能方式

    1 筛选出数据的指定几行数据 data df loc 2 5 这里的 2 5 表示第3行到第5行内容 第一个起始是0 表示数据的第一行 2 筛选出数据某列为某值的所有数据记录 data df df 列名1 列值1 多条件匹配时 data m
  • UNIX网络编程卷一 学习笔记 第二十四章 带外数据

    许多传输层都有带外数据 out of band data 的概念 它有时也称为经加速数据 expedited data 其想法是一个连接的某端发生了重要的事情 且该端希望迅速通告其对端 这里的迅速指这种通知应该在已经排队等待发送的任何普通
  • PowerDesigner书签(02)导入SQL脚本生成ER图

    楔子 那时你很喜欢她吧 你不是觉得非她莫属 才跟她结婚的吗 同理 你现在痴迷的这个女人也没什么特别的 所谓的非她莫属从一开始就不存在 世上根本没有姻缘的红线 东野圭吾 黎明之街 1 今日书签 PowerDesigner 16 5 导入现有本
  • springBoot 跨域/文件上传/邮件

    学习目标 跨域请求 文件上传 邮件处理 跨域请求 1 跨域怎么理解 跨域是什么 跨域是指不同域名之间的相互访问 这是由浏览器的同源策略决定的 是浏览器对JavaScript施加的安全措施 防止恶意文件破坏 同源策略 同源策略是一种约定 它是