spring学习-spring实战问题记录

@toc

spring实战问题记录

原书代码地址

JPA

新的spring中findById返回值是Optional<>类型,需要修改converter的类型和函数返回值类型。

public class IngredientByIdConverter implements Converter<String, Optional<Ingredient>> {

  private IngredientRepository ingredientRepo;

  @Autowired
  public IngredientByIdConverter(IngredientRepository ingredientRepo) {
    this.ingredientRepo = ingredientRepo;
  }
  
  @Override
  public Optional<Ingredient> convert(String id) {
    return ingredientRepo.findById(id);
  }

}

security

照着书加入了security,但是在我访问/login有下面报错

There was an unexpected error (type=Not Found, status=404).

需要在webconfig.java里加入路由配置,

public void addViewControllers(ViewControllerRegistry registry) {
    registry.addViewController("/").setViewName("home");
    registry.addViewController("/abc").setViewName("home");
    registry.addViewController("/login");
  }

最后一行指定/login对应的路由。

加入AngularJS前端

对应书上第二部分第6章

  • 原书代码使用java8,pom.xml里的java.version都是1.8,需要改为本机对应的jdk,否则会有warning,我使用jdk11,改为11
{
	"resource": "/home/aiqiang/Spring/ch06/tacos",
	"owner": "_generated_diagnostic_collection_name_#2",
	"code": "0",
	"severity": 4,
	"message": "The compiler compliance specified is 1.8 but a JRE 11 is used",
	"source": "Java",
	"startLineNumber": 1,
	"startColumn": 1,
	"endLineNumber": 1,
	"endColumn": 1
}
  • thymeleaf.extra
dependencies.dependency.version' for org.thymeleaf.extras:thymeleaf-extras-springsecurity4:jar is missing

因为我使用的springboot2.5.1,所以此处需要改变版本

<dependency>
			<groupId>org.thymeleaf.extras</groupId>
			<artifactId>thymeleaf-extras-springsecurity5</artifactId>
		</dependency>
  • tacocloud-api中的pom.xml需要加入hateoas的依赖
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-hateoas</artifactId>
</dependency>

另外由于hateoas同样有变化,所以需要改变代码中的import内容,比如LinkBuilder 和 EntityLinks移动到了server包中,相关升级后的代码在tacocloud-api中,可以在我的git仓库里找到
对应替换脚本可以从官方仓库

  • 我用的是springboot5,里面使用juit5,需要按照文档把作者提供的代码更新,文档,主要部分位于tacos的test文件夹下,可以参考我已经升级完的版本
  • 原书给的代码将内容拆分了,直接用maven去build发现报错
    java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException

此处指出java11移除了JAXB的API
stackoverflow
手动加入pom.xml,

dependency>
			<groupId>jakarta.xml.bind</groupId>
			<artifactId>jakarta.xml.bind-api</artifactId>
		</dependency>

		<!-- JAXB RI, Jakarta XML Binding -->
		<dependency>
			<groupId>com.sun.xml.bind</groupId>
			<artifactId>jaxb-impl</artifactId>
			<version>3.0.2</version>

最开始我加入了3.0.0的版本,发现还是会报错,后来在maven的官方仓库里发现了新版本,换成新版本3.0.2神秘就好了,原因不明
报错如下

java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException

换成3.0.2版本前,报错为

he Class-Path manifest attribute in /home/aiqiang/.m2/repository/com/sun/xml/bind/jaxb-impl/3.0.0/jaxb-impl-3.0.0.jar referenced one or more files that do not exist: 
file:/home/aiqiang/.m2/repository/com/sun/xml/bind/jaxb-impl/3.0.0/jaxb-core.jar
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

greatofdream

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值