spring boot踩的坑系列(一)

在做系统的时候,也是遇到了一些坑,开始不是很熟练,然后慢慢查找资料慢慢解决了,这里将其列出来,以便以后可以绕开这些坑。

 

1、前端ajax、jQuery等问题

(1)在ajax与java后端传递数据的时候,传递给ajax的是一个data对象,ajax中调用对象中的属性的时候,属性名要一致,调用对象的数组属性的时候直接用data.num[i]的形式即可。主要是属性名要一致。

(2) 后端与ajax传递数据的时候,实体类的属性名首字母最好小写,这样不容易出错。

(3)ajax向后端传递参数的时候,在开始定义一个params,多个参数之间用逗号隔开。格式如下:

        var params={

         "num" : 1,//传递一个整数num,值为1

         "string ": "dsfs",//传递一个字符串,值为dafs

        };

(4)js中是无法使用Thymeleaf语法的,只能使用HTML语言
在js中,如果要跳转至某个页面,直接href=""或者链接src就行,不用th:href="",这样的形式。使用href表示的是向后端传递数据,因此内容是控制端的名称

(5)在使用webuploader插件进行文件的上传的时候,jQuery中设计到几个变量,uploader方法是实行文件的上传的具体方法。其方法中涉及到一个swf,这是webupload插件的一个插件,先要下载将其导入本项目中,然后在js里面设置swf为该文件的路径。另外,还有一个server,这个应该是一个PHP方法,即调入后台控制端,类似于ajax的URL一样,通过调入后台控制端将文件保存在项目中,或者保存在服务器中。

(6)控制端向js传递数据,可以现在后端将数据放在model中,然后在HTML中获取,并将其隐藏,然后再在js中获取其值。
HTML:<input type="hidden" th:value="${blogId}" id="Blog_ID"/>
js:var url_param = $("#Blog_ID").val();

(7)在js引用路径的时候,src中是不需要开头加一个/的,加不加效果都一样

(8)文件上传至项目中指定文件夹,但是文件夹内的内容不是瞬间更新,因此,当前端ajax调用这些文件的时候,是无法找到该文件的,只有当项目更新了文件夹里面有这些文件的时候才可以获取到。

(9)onclick出发事件的参数为this表示传递的参数为此标签本身。如
<a class="fancybox" href="javascript:void(0);"><img οnclick="selectImgPath(this)" style="width: 190px; height: 115px;float:left;margin-right:3px;" alt="image" src="www.baidu.com" /></a>
然后传递的参数就可以访问src的内容。如传递的参数为msg,调用src为msg.src表示的就是www.baidu.com

(10)src和href的区别:src用于替换当前元素,href用于在当前文档和引用资源之间确立联系。
src是source的缩写,指向外部资源的位置,指向的内容将会嵌入到文档中当前标签所在位置;在请求src资源时会将其指向的资源下载并应用到文档内,例如js脚本,img图片和frame等元素。如<script src ="js.js"></script>当浏览器解析到该元素时,会暂停其他资源的下载和处理,直到将该资源加载、编译、执行完毕,图片和框架等元素也如此,类似于将所指向资源嵌入当前标签内。这也是为什么将js脚本放在底部而不是头部。
href是Hypertext Reference的缩写,指向网络资源所在位置,建立和当前元素(锚点)或当前文档(链接)之间的链接,如果我们在文档中添加<link href="common.css" rel="stylesheet"/>那么浏览器会识别该文档为css文件,就会并行下载资源并且不会停止对当前文档的处理。这也是为什么建议使用link方式来加载css,而不是使用@import方式。

2、Jpa分页的问题

(1) jpa进行分页查询的时候,按照某个属性列来进行查询的方法为;
        @Query(value = "SELECT * FROM USERS WHERE LASTNAME = ?1 ORDER BY ?#{#pageable}",countQuery = "SELECT count(*) FROM USERS WHERE LASTNAME = ?1",  nativeQuery = true)Page<User> findByLastname(String lastname, Pageable pageable);

(2) 在调用查询所有进行分页的时候,是可以直接调用jpa的findAll方法的,参数为pageable,但是这里的以什么为正序倒序和上面不同,上面的是表明,这里的是对象的主键名,这里的名称要和对象中的属性名要一致,不然就会出现问题。也就是这里要为blogid(对象中的主键名就为blogid)

(3)jpa根据某列查询,并且查询得到的结果集是根据某具体页得到的结果
这种情况是和之前查询所有的结果集是不一样的,之前的是获取所有的结果传到表格中,表格中显示规定大小的数据集,点击下一页的时候自动显示相关页的数据。但是这里穿的参数是具体的某页,也就是说想要的返回的结果集是根据某具体页查询得到的结果。这种情况下处理的代码:
@Query(value="select * from blog  where status =?1 ",countQuery="select count(*) from blog where status=?1",nativeQuery=true)
public Page<Blog> getBlogsByStatusForList(int status,Pageable pageable);
与之前的区别是这里没有将pageable参数传递到query中去,这样返回的结果集就是根据某具体页查询得到的结果    

(4)在进行分页查询的时候,整个表的数据共有12条,查询所有的时候不会出现异常,将全部的数据都设为同一状态,即这种状态共有12条数据,根据这种状态进行查询的时候,就会出现异常。但是将这种状态的数据改为有9条的时候就不会出现异常。异常:java.lang.IllegalArgumentException: Could not locate ordinal parameter [2], expecting one of [1]

(5)jpa进行模糊匹配,并且进行分页查询。
示例:

@Query(value="select * from blog  where status =?1 and key_word like CONCAT('%',?2,'%')",countQuery="select count(*) from blog where status=?1",nativeQuery=true)
   public Page<Blog> getBlogsByStatusForList(int status,String key_word,Pageable pageable);

(6)在将json的page格式的字符串格式的内容转换为json对象,需要将page<>具体化,即创建一个对象实现page接口和Serializable接口。

(7)在使用jpa层的时候出现了Unknown column 'blogId' in 'order clause'错误,查询了下,这是在使用分页进行查询的时候,顺序是按照blogId进行排序的,不过这里的查询的是按照表中的blog_id这一列来进行倒序或者正序的。因此,这里的在sort类的参数中应设置的值为:blog_id。源代码如下:
    Sort sort=new Sort(Direction.ASC, "blog_id");
    Pageable pageable=new PageRequest(pageNumber-1, pageSize, sort);

4、spring boot框架的问题

(1)添加微服务的依赖的时候,需要注意spring  boot的版本和eureka的版本问题,spring boot的版本与eureka的版本是一一对应的,版本不对就会不兼容,就会出现问题。为了使项目能够支持比较新的技术,最好使用最新版的spring boot和eureka。版本对应关系:https://blog.csdn.net/russle/article/details/80865288。这里给出依赖:

 <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.0.RELEASE</version>
        <relativePath/>
    </parent>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <version>2.0.0.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka-server</artifactId>
            <version>1.4.4.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-config</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka</artifactId>
            <version>1.4.4.RELEASE</version>
        </dependency>
    </dependencies>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Finchley.BUILD-SNAPSHOT</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <repositories>
        <repository>
            <id>spring-snapshots</id>
            <name>Spring Snapshots</name>
            <url>https://repo.spring.io/libs-snapshot</url>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </repository>
    </repositories>

如果老的版本有些功能是不能支持的,比如spring boot1.x.x版本的就不支持jpa的分页功能,因此最好使用最新版本的spring boot和eureka。

(2)spring boot在创建spring cloud支持的时候需要的spring boot2.0.0以上的版本   所以需要将默认的2.1版本的改为2.0.0以上的版本,而有些版本是有问题的,如果遇到版本更新pom文件后依然出现问题,可以更改2.0.X的数字,例如,2、3、4等版本型号

(3)项目的热部署依赖:

        <dependency>			
			<groupId>org.springframework.boot</groupId>			
			<artifactId>spring-boot-devtools</artifactId>			
			<scope>true</scope>			
			<optional>true</optional> <!-- 这个需要为 true 热部署才有效 -->
		</dependency>
		<plugin>				
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-maven-plugin</artifactId>
			<configuration>					
				<fork>true</fork> <!-- 如果没有该配置,devtools不会生效 -->
			</configuration>	
		</plugin>

(4)在两个项目中的,一个项目读取另一个项目中的图片信息时,如果对象只是保存着该图片的相对地址,则在显示的时候如果路径仅仅是相对路径,就会无法显示路径,因为在另一个项目中相对路径是相对于本项目中的相对路径。

(5)运用security后js css等静态文件默认是会被拦截的,解决方案:https://blog.csdn.net/malachi95/article/details/53641541

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值