我想通过两种不同的@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/profile
(Accept=*/*
)来电getProfile()
GET /test/profile
(Accept=application/json
)来电getProfile()
GET /test/profile.json
(Accept=*/*
)来电getProfile()
GET /test/profile.json
(Accept=text/vcard
)返回406 NOT ACCEPTABLE
GET /test/profile
(Accept=text/vcard
)来电getProfileVCard()
GET /test/profile.vcf
(Accept=text/vcard
)来电getProfileVCard()
错误的一个:
GET /test/profile.vcf
(Accept=*/*
}拨打getProfile()
并返回406 NOT ACCEPTABLE
。
为什么调用错误的方法?我以为我在配置中设置favorPathExtension(true)
以便在设置某个路径扩展时使Spring覆盖Accept-Header?
我现在还在我的配置中设置了favorPathExtension(true).ignoreAcceptHeader(true).favorParameter(true)
,但它仍然不起作用,即使profile?format=vcf
和profile.vcf?format=vcf
无法正常工作