springで406 Not Acceptableが発生して原因が分かるまでに多少の時間を要した。lombokの @Data
が何らかの要因で無効になりgetterが存在しないとjson生成が上手くいかず、結果として406 Not Acceptableになるようだ。
以下は検証用のコードなど。
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class SomeRestController {
@GetMapping("/item")
public Item item() {
return new Item("11");
}
}
ポイントとして、あえてlombokの @Data
を外している。
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
//@Data
@AllArgsConstructor
@NoArgsConstructor
public class Item {
String item;
}
この状態で http://localhost:8080/item にアクセスすると下記キャプチャのように406 Not Acceptableになる。
詳しい原因までは調査していないが、lombokでgetterが生成されないのでjsonの生成も上手くいかず、converterで何かしらおかしなことになるんだろうな、と想像している。