我正在尝试创建一个Spring MVC 4 Web项目(Maven项目)以处理REST请求。 如果HTTP接受是text / html,系统应该回答网页 在json中,如果是application / json(可能是其他格式,如XML,以防它是application / xml)。
我已经设置了一个控制器和JSP(我也使用了@RestController)。问题在于我无法使其发挥作用。如果系统使用JSP正确回答,那么json服务不起作用,反之亦然。 我是否必须为每个表示设置一个处理程序,以及如何?
提前谢谢。
答案 0 :(得分:1)
要确定用户请求的格式依赖于 ContentNegotationStrategy ,可以使用开箱即用的默认实现,但如果您愿意,也可以实现自己的
使用 HTTP消息转换器:
配置和使用与Spring的内容协商您必须在Spring MVC中启用内容协商:
<bean id="cnManager"
class="org.springframework.web.accept.ContentNegotiationManagerFactoryBean">
<property name="favorPathExtension" value="true"/>
<property name="ignoreAcceptHeader" value="true" />
<property name="defaultContentType" value="application/json" />
<property name="useJaf" value="false"/>
<property name="mediaTypes">
<map>
<entry key="html" value="text/html" />
<entry key="json" value="application/json" />
<entry key="xml" value="application/xml" />
</map>
</property>
</bean>
或者使用java配置:
@Configuration
@EnableWebMvc
public class WebConfig extends WebMvcConfigurerAdapter {
@Override
public void configureContentNegotiation(
ContentNegotiationConfigurer configurer) {
configurer.favorPathExtension(true).
ignoreAcceptHeader(true).
useJaf(false).
defaultContentType(MediaType.TEXT_HTML).
mediaType("html", MediaType.TEXT_HTML).
mediaType("xml", MediaType.APPLICATION_XML).
mediaType("json", MediaType.APPLICATION_JSON);
}
}
答案 1 :(得分:0)
这是一个例子: 第一个方法将返回每个get for url end ... / client的client.jsp页面,第二个方法将为每个get end返回一个客户端json对象... / clients / id
@RequestMapping(value = "/client", method = RequestMethod.GET)
public ModelAndView getClientPage(final HttpServletRequest request,
final Model model,final HttpSession session) {
// traitement
return new ModelAndView("client");
}
@RequestMapping(value = "/clients/{id}", method = RequestMethod.GET)
public @ResponseBody Client getClient(@pathVariable("id") long id) {
Client client = YourService.getClient(id);
return client;
}
Contentnegotiatingviewresolver java config:
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "com.yourbasepackage")
public class AppConfig extends WebMvcConfigurerAdapter {
@Bean
public ViewResolver jspViewResolver() {
InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
viewResolver.setViewClass(JstlView.class);
viewResolver.setPrefix("/WEB-INF/views/");
viewResolver.setSuffix(".jsp");
return viewResolver;
}
}