Spring-bootでサンプル通りに作ったがToStringBuilderなどでエラーが発生する

投稿者: Anonymous

Spring bootのサンプルを自分の環境で実行しようとしたらエラーで出来ない状態です。

このページの通りにコピペしました。

https://qiita.com/[email protected]/items/e4fda26faddbcfd84d16

環境

  • VSCode 1.34.0
  • MariaDB 10.3(x64)
  • Java 1.8.0
  • Spring-boot 2.0.4

出ているエラーは次の通りです。
1, Prefecture.java にて ToStringBuilder.reflectionToStringが認識されない

reflectionToString

The method reflectionToString(Prefecture, ToStringStyle) is undefined for the type ToStringBuilderJava(67108964)

となってしまいます。

2, ActorController.javaでエラー

actorRepositorydelete()findOne() が使えません。

void org.springframework.data.repository.CrudRepository.delete(Actor arg0)
The method delete(Actor) in the type CrudRepository is not applicable for the arguments (Integer)Java(67108979)

The method findOne(Example) in the type QueryByExampleExecutor is not applicable for the arguments (Integer)Java(67108979)

また、

private Actor<Prefecture> convert(ActorForm form) {

Actor

com.example.actor.repository.Actor
The type Actor is not generic; it cannot be parameterized with arguments Java(16777740)

になります。


一応 pom.xml です

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.0.M3</version>
        <relativePath/>
        <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>demo</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-validation</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web-services</artifactId>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 -->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.9</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.0.1</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.mariadb.jdbc</groupId>
            <artifactId>mariadb-java-client</artifactId>
            <version>2.1.2</version>
        </dependency>
        <dependency>
            <groupId>org.postgresql</groupId>
            <artifactId>postgresql</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>junit</groupId>
                    <artifactId>junit</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

    <repositories>
        <repository>
            <id>spring-snapshots</id>
            <name>Spring Snapshots</name>
            <url>https://repo.spring.io/snapshot</url>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </repository>
        <repository>
            <id>spring-milestones</id>
            <name>Spring Milestones</name>
            <url>https://repo.spring.io/milestone</url>
        </repository>
    </repositories>
    <pluginRepositories>
        <pluginRepository>
            <id>spring-snapshots</id>
            <name>Spring Snapshots</name>
            <url>https://repo.spring.io/snapshot</url>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </pluginRepository>
        <pluginRepository>
            <id>spring-milestones</id>
            <name>Spring Milestones</name>
            <url>https://repo.spring.io/milestone</url>
        </pluginRepository>
    </pluginRepositories>

</project>

application.yml(.properties みたいなもの)

server:
    port: 9000

spring:
    thymeleaf:
        enabled: true
        cache: false

    datasource:
        driverClassName: org.mariadb.jdbc.Driver
        url: jdbc:mariadb://localhost/sample_db_spring
        username: ユーザー名
        password: ****

    jpa:
        hibernate:
            show-sql: true
            ddl-auto: update
        database-platform: org.hibernate.dialect.MySQLDialect

    messages:
        basename: messages
        cache-seconds: -1
        encoding: UTF-8

endpoints:
    enabled: true

repository.java

package com.example.demo.repository;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

import org.apache.commons.lang3.builder.ToStringStyle;
import org.junit.platform.commons.util.ToStringBuilder;

import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

@Entity
@Table(name = "prefecture")
@Getter
@Setter
@ToString
public class Prefecture {

    @Id
    @Column(name="id")
    @GeneratedValue(strategy=GenerationType.AUTO)
    private Integer id;
    @Column(name="name", nullable=false)
    private String name;

    // @Override
    // public String toString() {
    //     return ToStringBuilder.reflectionToString(this);
    // }
}

解決

2については解決しているようなので、1について回答します。1のエラーの原因は、

import org.apache.commons.lang3.builder.ToStringBuilder;

とすべき行で、

import org.junit.platform.commons.util.ToStringBuilder;

としているからです。つまり、Apache Commons LangのToStringBuilderには、reflectionToString()というメソッドがありますが、JUnitのToStringBuilderには、reflectionToString()というメソッドが無いからです。

そういえばあまり気にしていませんでしたがapplication.ymlのendpointsも何故か認識されません

これはSpring Boot Actuatorを導入(Mavenの依存関係に追加)していないからですよね。pom.xmlに以下を追加してみて下さい。

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-actuator</artifactId>
    </dependency>
回答者: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *