ここに私のコントローラクラスがあります:
@Controller
@RequestMapping("/actuator")
public class HealthController {
@RequestMapping(value = "/metrics", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON)
@ResponseBody
public HealthModel getDump() throws JsonProcessingException {
return new HealthModel();
//return mapper.writeValueAsString(metrics.invoke());
}
@RequestMapping(value = "/metrics", method = RequestMethod.GET, produces = MediaType.TEXT_PLAIN)
@ResponseBody
public String getHealth() {
return "HEALTHY";
}
}
モデル
public class HealthModel {
@JsonProperty
private String status;
@JsonProperty
private int id;
public HealthModel(){
this.status="WARN";
this.id=2;
}
}
注:リクエストで/metrics
returnjson
またはplain-text
に応じてマッピングしましたAccept Header
でリクエストするとき
curl -v -H "Accept: application/json" http://localhost:8080/myapp/actuator/metrics
json で期待される応答が得られ
{"status":"WARN","id":2}
ます。
しかし、試してみると
curl -v -H "Accept: text/plain" http://localhost:8080/myapp/actuator/metrics
私は得るHTTP/1.1 406 Not Acceptable
。
編集
@EnableWebMvc
@Configuration
public class AppMvcConfig extends WebMvcConfigurerAdapter {
@Resource(name = "appObjectMapper")
private ObjectMapper appObjectMapper;
@Resource(name = "modelObjectMapper")
private ObjectMapper modelObjectMapper;
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
final MappingJackson2HttpMessageConverter inputConverter = new MappingJackson2HttpMessageConverter();
inputConverter.setObjectMapper(appObjectMapper);
final MappingJackson2HttpMessageConverter outputConverter = new MappingJackson2HttpMessageConverter();
outputConverter.setObjectMapper(modelObjectMapper);
converters.add(new JacksonDualMapperConverter(appObjectMapper, modelObjectMapper));
super.configureMessageConverters(converters);
}
}