よわよわエンジニアの学習記録

エンジニアになってからの学びを残しておきます。間違い等ございましたら、指摘していただけると泣いて喜びます!笑

【Spring】 java.lang.IllegalArgumentException: Pointcut is not well-formed: expecting 'name pattern' 対策方法

AOPの実装時のエラー

AOP実装時にCaused by: java.lang.IllegalArgumentException: Pointcut is not well-formed: expecting 'name pattern' というエラーが発生しました。

 

原因

誤字脱字①

修正前:"execution(*com.example.demo.login.controller.LoginController.getLogin(..))"

修正後:"execution(* com.example.demo.login.controller.LoginController.getLogin(..))"

 

誤字脱字➁

修正前:"execution(* * .. * . * Controller.* (..))"

修正後:"execution(* *..*.*Controller.*(..))"

 

スペースの抜けが原因でした、、

スペースの抜けのエラーはよくあるのでよく確認しようと思います。

【Spring】javax.validationのimportエラーの対処法

Springを学習して

Spring解体新書という本を読んで、Springの学習を行っていましたが、第6章のバリデーションの実装で、javax.validationのimportができず困ったので、解決策をメモとして残しておきます。

 

原因

Spring Bootのバージョンが2.3以降だとjavax.validationが含まれていないようです。

 

解決策

①pom.xmlのファイルに下記dependenciesを追加する。

        <dependency>
            <groupId>javax.validation</groupId>
            <artifactId>validation-api</artifactId>
            <version>2.0.0.Final</version>
        </dependency>

※1.1.0.Finalのversionだと一部バリデーションがimportされなかったので注意

 

➁プロジェクトを右クリック→Marven→プロジェクトの更新を行えばエラー解消!

 

初心者向け【Docker】dockerfileがbuildできないときの対処法

下記エラーが出てDockerfileがbuildできず、悪銭苦闘していました、、

failed to solve with frontend dockerfile.v0: failed to read dockerfile: open /var/lib/docker/tmp/buildkit-mount1566600172/Dockerfile: no such file or directory

このエラーが出る原因は様々ですが、僕の場合は拡張子がtxtだったことが原因でした。

 

拡張子なしで作成するとエラーが解消され無事buildできました!

 

ここでつまずくのは僕くらいかもしれませんが、誰かのお役に立てたら幸いです!

 

【Python】Seleniumをインストールしているのにimportできない場合の

Seleniumをインストールしているのにimportできない場合の解決策

1.インストールしたのにimportできない...

開発環境:visual studio code

ターミナルで「py -m pip install selenium==3.141.0」を入力して、

インストールは成功しました。

 

ですが、「Import "selenium" could not be resolved from sourcePylance(reportMissingModuleSource)」のエラーが表示されimportできませんでした、、

2.解決策

①画像の矢印の部分をクリック

Python 3.105 64-bitを選択

➂エラーが消えました!

 

3.まとめ

なかなか解決できなくてイライラしたので、同じように悩んでいる方の助けになれば幸いです!

@ResponseStatusでHTTPレスポンスのステータスを指定する方法 Spring

HTTPレスポンスの番号を指定したいなーと思ったので、@ResponseStatesを使って

指定してみました。

 

@ResponseStatesとは?

メソッドにつけることでレスポンスのステータスを指定できるアノテーションです。

()の中に指定したHTTPステータスを返すことができます。

()内にはHttpStatus.〇〇〇という形で記載します。(HttpStatusはenumです。)

 

使用例

今回はDLETEメソッドで204番を返せすようにします。

①コントローラー(ResponseStatesに関してはここのみ確認でOKです!)

package com.hourse.example.hourselist;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class RaceController {
    @Autowired
    private RaceRepository raceRepository;
  
    
    @DeleteMapping("/hourse/{order_of_arrival}")
    @ResponseStatus(HttpStatus.NO_CONTENT)

 //今回は204に指定したかったのでNO_CONTENTにしています
    public void hourseDelete(@PathVariable int order_of_arrival) {
        raceRepository.deleteById(order_of_arrival);
    }
}

リポジトリ

package com.hourse.example.hourselist;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface RaceRepository extends JpaRepository<Tennosho, Integer>{

}

➂Bean

package com.hourse.example.hourselist;

import javax.persistence.Entity;
import javax.persistence.Id;

@Entity
public class Tennosho {
    @Id
    int order_of_arrival;
    String hourse_name;
    
    
    public int getOrder_of_arrival() {
        return order_of_arrival;
    }
    public void setOrder_of_arrival(int order_of_arrival) {
        this.order_of_arrival = order_of_arrival;
    }
    public String getHourse_name() {
        return hourse_name;
    }
    public void setHourse_name(String hourse_name) {
        this.hourse_name = hourse_name;
    }
    
    
}

④application.properties

spring.jpa.show-sql = true
spring.h2.console.enabled = true
spring.datasource.url = jdbc:h2:mem:testdb
spring.jpa.defer-datasource-initialization = true

 

・指定前の実行画面

・指定後の実行画面

ちゃんと変わってます!やったー

 

所感

使い方は難しくないですが、初めてだと戸惑ってしまうと思うのでぜひ参考にしてみてください!

@PutMappingの使い方と使用例 Spring

@PutMappingとは?

リクエストに対してデータの更新を行う際に付与するアノテーションです。

(RequestMappingなどと同様にコントローラーのメソッドに付与します。)

 

使い方は単純なので使用例を紹介します。

 

使用例

①コントローラー(Putに関してはここのみ確認でOKです!)

package com.hourse.example.hourselist;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class RaceController {
    @Autowired
    private RaceRepository raceRepository;
    
    @PutMapping("/hourse/{order_of_arrival}")
    public void racePut(@PathVariable int order_of_arrival,
            @RequestBody Tennosho tennosho) {
        tennosho.setOrder_of_arrival(order_of_arrival);
        raceRepository.save(tennosho);
    }
}

 

リポジトリ

package com.hourse.example.hourselist;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface RaceRepository extends JpaRepository<Tennosho, Integer>{

}

➂Bean

package com.hourse.example.hourselist;

import javax.persistence.Entity;
import javax.persistence.Id;

@Entity
public class Tennosho {
    @Id
    int order_of_arrival;
    String hourse_name;
    
    
    public int getOrder_of_arrival() {
        return order_of_arrival;
    }
    public void setOrder_of_arrival(int order_of_arrival) {
        this.order_of_arrival = order_of_arrival;
    }
    public String getHourse_name() {
        return hourse_name;
    }
    public void setHourse_name(String hourse_name) {
        this.hourse_name = hourse_name;
    }
    
    
}

④application.properties

spring.jpa.show-sql = true
spring.h2.console.enabled = true
spring.datasource.url = jdbc:h2:mem:testdb
spring.jpa.defer-datasource-initialization = true

 

・実行前DB

・実行画面 200番成功! (POSTMANを使用しています)

URL:localhost:8080/hourse/1

・実行後DB 

ちゃんと変わってます!

 

所感

使い方はPOSTとほとんど同じなので、それほど難易度は高くないと思います!

 

@Contollerと@RestContollerの違い Spring アノテーション

Spring MVCのコントローラークラスでつける

@Contoroller、RestContorollerのアノテーションの違いを簡単にまとめてみる。

@Controller

Webページ表示したいよって時に使う。

HTML(MVCのView)を戻り値として返すときに使用。

Webページ用のアノテーション

 

@RestContoroller

リクエストを受けてJSONXMLを返すWebAPI用のコントローラに使う。

 
所感
使い分けわかってよかったです!なんでRestつけてるかわかりました、、