B-Teck!

お仕事からゲームまで幅広く

【Bash】指定のポートを利用しているプロセスを殺す

プロセス探してkillしてを別々にやってたけどよく考えたら一行でできたのでメモ。
StackOverfrowに書いてあった。
bash - How to write a shscript to kill -9 a pid which is found via lsof -i - Ask Ubuntu

# :80の部分は任意のポート番号
kill -9 $(lsof -ti tcp:80)

【Kotlin/Java】Jersey2でファイルアップロードを扱う

Jersey2でファイルアップロードを扱うときの方法を書いている記事があまり見つからなかったのでメモ。
StackOverfrowで見つけた。
java - Upload data method in REST web service - Stack Overflow

アップロードされたファイルはbyte配列InputStreamで扱えるようなので、
それを受け付けてやれば良いらしい。

Javaの場合

  • byte配列で受け取る
@Path("/upload")
class UploadResource {
    @POST
    @Consumes(MediaType.APPLICATION_OCTET_STREAM)
    public Response upload(byte[] input) {
        // 入力に対してなんかする
        return Response.ok().build();
    }
}
  • InputStreamで受け取る
@Path("/upload")
class UploadResource {
    @POST
    @Consumes(MediaType.APPLICATION_OCTET_STREAM)
    public Response upload(InputStream input) {
        // 入力に対してなんかする
        return Response.ok().build();
    }
}

Kotlinの場合

  • byte配列で受け取る
@Path("/upload")
class UploadResource {
    @POST
    @Consumes(MediaType.APPLICATION_OCTET_STREAM)
    fun upload(input : ByteArray) : Response {
        // 入力に対してなんかする
        return Response.ok().build()
    }
}
  • InputStreamで受け取る
@Path("/upload")
class UploadResource {
    @POST
    @Consumes(MediaType.APPLICATION_OCTET_STREAM)
    fun upload(input : InputStream) : Response {
        // 入力に対してなんかする
        return Response.ok().build()
    }
}

【Kotlin】Kotlin+JacksonでJSONをparseする

準備

ビルドツールの設定に jackson-module-kotlin を追加する。
バージョンは任意で。

  • maven
    <dependencies>
        <dependency>
            <groupId>com.fasterxml.jackson.module</groupId>
            <artifactId>jackson-module-kotlin</artifactId>
            <version>2.9.7</version>
        </dependency>
    </dependencies>
  • gradle
compile group: 'com.fasterxml.jackson.module', name: 'jackson-module-kotlin', version: '2.9.7'

手順

JSONを用意する

{
    "name" : "beatdjam",
    "age" : "28",
    "url" : "http://beatdjam.hatenablog.com/"
}

JSONのプロパティに対応するdata classを作る

data class Person(
    val name : String,
    val age : String,
    val url : String
)

JSONをdata classへparseするメソッドを作る

inline fun <reified T : Any> parseJSON(json : String) : T {
    return jacksonObjectMapper().readValue(json, T::class.java)
}

data classを型パラメータに指定して3のメソッドを呼び出す

val result = parseJSON<Person>(json)
// または
val result2 : Person = parseJSON(json)

ソース全文

import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper

fun main(args: Array<String>) {
    val json = """
        {
            "name" : "beatdjam",
            "age" : "28",
            "url" : "http://beatdjam.hatenablog.com/"
        }
    """

    val result = parseJSON<Person>(json)
    println(result.name)
    println(result.age)
    println(result.url)
}

inline fun <reified T : Any> parseJSON(json : String) : T {
    return jacksonObjectMapper().readValue(json, T::class.java)
}

data class Person(
    val name : String,
    val age : String,
    val url : String
)