package com.packt.springboot.blogmania.blogentries.service; import com.packt.springboot.blogmania.blogentries.model.BlogEntry; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.core.env.Environment; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; import javax.validation.constraints.Min; import java.time.LocalDateTime; import java.time.LocalTime; import java.util.List; import java.util.stream.Collectors; @RequiredArgsConstructor @Slf4j @Service //Activity 2, make sure pagesize is >0 @Validated public class BlogService { private final BlogRepository blogRepository; /* * You can not only reference beans or property values, you * can even call methods and access properties without get/set prefixes */ @Value("#{blogService.timeMessage.toUpperCase()}") String message; @Value("${my.config.feature.flag:false}") boolean featureFlag; public void save(BlogEntry entry) { if (entry.getTitle() == null || entry.getBody() == null) { throw new IllegalArgumentException("Data missing"); } if (entry.getDate() == null) { entry.setDate(LocalDateTime.now()); } blogRepository.add(entry); } //Activity 2, make sure pagesize is >0 (make sure spring-boot-starter-validation depedency is present) public List<BlogEntry> retrievePagedBlogEntries(@Min(0) int page, @Min(1) int pageSize) { return blogRepository .retrieveBlogEntries() .stream() .skip(page * pageSize) .limit(pageSize) .collect(Collectors.toList()); } @Autowired public void init(Environment env) { log.info("my.config.value={}", env.getProperty("my.config.value", Integer.class, 42)); log.info("SpEL message: {}", message); } public String getTimeMessage() { return "It is " + LocalTime.now(); } }