Spring Content-Negotiation with Path Extension(通过扩展设置Accept-Header ?!)

时间:2014-01-22 20:55:02

标签: json spring spring-mvc content-negotiation

我想通过两种不同的@Controller方法获得相同的URL Path句柄,这些方法部分有效。这就是我所拥有的:

WebMvcConfig:

public class WebMvcConfig extends WebMvcConfigurationSupport {
    @Override
    protected void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        MappingJackson2HttpMessageConverter json = new MappingJackson2HttpMessageConverter();
        json.setObjectMapper(objectMapper());
        converters.add(json);
        VCardMessageConverter vcard = new VCardMessageConverter();
        converters.add(vcard);
    }

    @Override
    protected void configureContentNegotiation(ContentNegotiationConfigurer configurer) {
        configurer.favorPathExtension(true)
            .mediaType("json",  MediaType.APPLICATION_JSON)
            .mediaType("vcf",   MediaType.TEXT_VCARD)
            ;
    }
}

控制器:

@RestController
@RequestMapping("test")
class UserProfileController {
    @RequestMapping(value="profile", method=RequestMethod.GET, produces=MediaType.TEXT_VCARD_VALUE)
    VCard getProfileVCard() {
        Profile p = service.getProfile();
        VCard v = p.getVCard();
        return v;
    }

    @RequestMapping(value="profile", method=RequestMethod.GET)
    Profile getProfile() {
        Profile p = service.getProfile();
        return p;
    }
}

当前行为:

好的:

GET /test/profileAccept=*/*)来电getProfile()

GET /test/profileAccept=application/json)来电getProfile()

GET /test/profile.jsonAccept=*/*)来电getProfile()

GET /test/profile.jsonAccept=text/vcard)返回406 NOT ACCEPTABLE

GET /test/profileAccept=text/vcard)来电getProfileVCard()

GET /test/profile.vcfAccept=text/vcard)来电getProfileVCard()

错误的一个:

GET /test/profile.vcfAccept=*/*}拨打getProfile()并返回406 NOT ACCEPTABLE

为什么调用错误的方法?我以为我在配置中设置favorPathExtension(true)以便在设置某个路径扩展时使Spring覆盖Accept-Header?

编辑:

我现在还在我的配置中设置了favorPathExtension(true).ignoreAcceptHeader(true).favorParameter(true),但它仍然不起作用,即使profile?format=vcfprofile.vcf?format=vcf无法正常工作

0 个答案:

没有答案