如何解决如何解决我在通过邮递员测试 spring boot rest api 时遇到的错误?
我创建了一个简单的 api,它使用 spring boot 计算生日的剩余天数。 Tomcat服务器成功站起来,不报错。但是当我尝试通过邮递员发布 API 来测试它时,我在下面的屏幕截图中收到错误消息。我分享了下面服务层的代码和控制器层的代码。我应该怎么做才能修复这个错误?
项目结构:
Spring Boot 服务层:
@Service
public class BdayService {
private int yearOfBirth;
private int monthOfBirth;
private int dayOfBirth;
public String setTime(LocalDate birthday) {
if(birthday == null){
return null;
}
final boolean isToday = birthday.getMonth() == LocalDate.now().getMonth()
&& birthday.getDayOfMonth() ==LocalDate.now().getDayOfMonth();
if(birthday.isAfter(LocalDate.now())) {
return "Please insert a valid birthday.";
} else if (isToday) {
return "HAPPY BIRTHDAY!";
} else {
yearOfBirth = birthday.getYear();
monthOfBirth = birthday.getMonthValue();
dayOfBirth = birthday.getDayOfYear();
return timeRemaining(monthOfBirth,dayOfBirth);
}
}
private String timeRemaining(int month,int day) {
int currYear = LocalDate.now().getYear();
int currMonth = LocalDate.now().getMonthValue();
int currDay = LocalDate.now().getDayOfYear();
//TIME REMAINING
int hrsRemaining = 24 - LocalTime.now().getHour() - 1;
int minsRemaining = 60 - LocalTime.now().getMinute() - 1;
int secsRemaining = 60 - LocalTime.now().getSecond();
//Find how many days in the year in order to calculate the number of days left
final int daysInYear = LocalDate.now().isLeapYear() ? 366 : 365;
int daysRemaining = dayOfBirth > currDay ?
dayOfBirth - currDay - 1:
(daysInYear - currDay) + dayOfBirth - 1;
final int age = monthOfBirth > currMonth ?
currYear - yearOfBirth :
currYear + 1 - yearOfBirth;
return ("There are " + daysRemaining + " days,\n"
+ hrsRemaining + " hours,\n"
+ minsRemaining + " minutes and\n"
+ secsRemaining + " seconds until\n"
+ "you turn " + age + "!");
}
}
Spring Boot 控制器层:
@Controller
public class BdayController {
@Autowired
private BdayService bdayService;
@PostMapping("/findBirthDay")
public String findBirthDay(@RequestParam("bday") String bday){
//bday format => dd-mm-yyyy
int year = 0;
int month = 0;
int day = 0;
if(bday.contains("-")){
String[] bdayArray = bday.split("-");
year = Integer.parseInt(bdayArray[2]);
month = Integer.parseInt(bdayArray[1]);
day = Integer.parseInt(bdayArray[0]);
return bdayService.setTime(LocalDate.of(year,month,day));
}else{
return "Given date format is not invalid!";
}
}
}
Postman api 测试错误:
解决方法
您在正文中添加参数,您不应该,它应该在网址中:
代替:
http://localhost:8080/findBirthDay/
试试:
http://localhost:8080/findBirthDay?bday="02-03-1995"
在这里你可以找到一个关于如何使用请求参数的很好的教程: