1
votes

I tried to create my first Spring Back-end, simple application that stores music albums. Unfortunately none of the endpoints that I created work (I tested them using postman, requests return 404, not found). Below are all my project-related files/code:

@Repostiory
public interface AlbumRepository extends Repository<Album,Long> {
    @Query(value = "SELECT * FROM album", nativeQuery = true)
    List<Album> findAlbums();

    Album save(Album persisted);
}

@Service
public class AlbumService {
    @Autowired
    private AlbumRepository albumRepository;

    public void saveData(Album album) {
        this.albumRepository.save(album);
    }

    public List<Album> getAllAlbums() {
        return this.albumRepository.findAlbums();
    }

    @PostConstruct
    private void init() {}
}

@Entity
@Table(name="album")
public class Album {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    @Column(name="title")
    private String title;
}

@RestController
public class AlbumController {
    @Autowired
    AlbumService albumService;

    @RequestMapping(method=RequestMethod.POST, path="/album/post")
    public ResponseEntity<String> addAlbum(@RequestBody Album album) {
        albumService.saveData(album);
        return new ResponseEntity<String>(HttpStatus.OK);
    }

    @RequestMapping(method=RequestMethod.GET, path="/album/get")
    Iterable<Album> getAlbums() {
        return albumService.getAllAlbums();
    }
}

@SpringBootApplication
@EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class, DataSourceTransactionManagerAutoConfiguration.class, HibernateJpaAutoConfiguration.class})
public class MusesiteBackEndApplication {

    public static void main(String[] args) {
        SpringApplication.run(MusesiteBackEndApplication.class, args);
    }

    @Bean
    @ConfigurationProperties(prefix = "spring.datasource")
    public DataSource dataSource() {
        return DataSourceBuilder.create().build();
    }

}

What I tried:

  1. Adding @ComponentScan with packages:

    @ComponentScan({"com.musesite.dao", "com.musesite.model", "com.musesite.musesitebackend", "com.musesite.restful"})

Result: Field albumRepository in com.musesite.dao.AlbumService required a bean of type 'com.musesite.dao.AlbumRepository' that could not be found.

  1. Adding dataSource method that should create database.

    @Bean @ConfigurationProperties(prefix = "spring.datasource") public DataSource dataSource() { return DataSourceBuilder.create().build(); }

Result: None.

  1. Adding scanBasePackages in SpringBootApplication:

    @SpringBootApplication(scanBasePackages={ "com.musesite.dao", "com.musesite.model", "com.musesite.musesitebackend", "com.musesite.restful"})

Result: Field albumRepository in com.musesite.dao.AlbumService required a bean of type 'com.musesite.dao.AlbumRepository' that could not be found.

Unfortunately none of them help.

1

1 Answers

-1
votes

Try this way:

public interface AlbumRepository extends JpaRepository<Album,Long> {

}

You don't need to create native queries. You can use findAll() and save(album) without any additional code. (They are generated automatically)

---edit

Ooops! Also add the following annotation to one of your configuration class:

@EnableJpaRepositories