spring - 使用 Spring Framework 无法在请求映射中获取不同的 Content-Type

标签 spring spring-mvc spring-restcontroller spring-rest

这是我的 Controller 类:

@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返回 jsonplain-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);
    }

}

最佳答案

以防万一有人仍然得到 Type mismatch: cannot convert from MediaType to String[]错误:

解决方法是使用 MediaType.APPLICATION_JSON_VALUE

而不是 MediaType.APPLICATION_JSON
问候

关于spring - 使用 Spring Framework 无法在请求映射中获取不同的 Content-Type,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32403097/

相关文章:

spring - 如何在 Spring DI 失败时阻止 Java EE 应用程序启动

spring mvc applicationcontext.xml 和 spring servlet.xml 区别

angularjs - 在 Spring Web 项目中集成 Angular JS 导致将项目永远发布到 Tomcat

json - 在 Jackson 中序列化时如何忽略运行时字段

java - 如何将javascript数组传递给Spring Data Rest

spring - 在简单的休息服务上出现 404 错误

java - @MatrixVariable 与 @RequestParam 相比有哪些优势?

java - 上下文初始化失败 java.lang.NoClassDefFoundError : com/hazelcast/core/HazelcastInstance

java - 选择语言 Groovy 与 Java 的标准是什么?

java - 将 POI SXSSFWorkbook 流式传输到 servlet 输出流