我給這個一展身手。
以下是我在我的Configuration
類:
@Bean(name = "viewResolver")
public ContentNegotiatingViewResolver viewResolver() {
final ContentNegotiatingViewResolver contentNegotiatingViewResolver = new ContentNegotiatingViewResolver();
contentNegotiatingViewResolver.setOrder(1);
contentNegotiatingViewResolver.setFavorPathExtension(true);
contentNegotiatingViewResolver.setFavorParameter(true);
contentNegotiatingViewResolver.setIgnoreAcceptHeader(false);
final Map<String, String> mediaTypes = new HashMap<String, String>();
mediaTypes.put("json", "application/x-json");
mediaTypes.put("json", "text/json");
mediaTypes.put("json", "text/x-json");
mediaTypes.put("json", "application/json");
mediaTypes.put("xml", "text/xml");
mediaTypes.put("xml", "application/xml");
contentNegotiatingViewResolver.setMediaTypes(mediaTypes);
final List<View> defaultViews = new ArrayList<View>();
defaultViews.add(jsonView());
defaultViews.add(xmlView());
contentNegotiatingViewResolver.setDefaultViews(defaultViews);
return contentNegotiatingViewResolver;
}
@Bean(name = "xStreamMarshaller")
public XStreamMarshaller xStreamMarshaller() {
return new XStreamMarshaller();
}
@Bean(name = "xmlView")
public MarshallingView xmlView() {
final MarshallingView marshallingView = new MarshallingView(xStreamMarshaller());
marshallingView.setContentType("application/xml");
return marshallingView;
}
@Bean(name = "jsonView")
public MappingJacksonJsonView jsonView() {
return new MappingJacksonJsonView();
}
這裏是在Controller
發生的事情。
@RequestMapping(value = { "/pets" }, method = RequestMethod.GET)
public String list(Model model) {
model.addAttribute("pets", petRepository.findAll());
return "pets/list";
}
@RequestMapping(value = { "/pets" }, method = RequestMethod.POST)
public String create(@Valid @RequestBody Pet pet, Model model) {
petRepository.save(pet);
return "redirect:pets/read/" + pet.getId();
}
@RequestMapping(value = { "/pets/{petId}" }, method = RequestMethod.GET)
public String read(@PathVariable Integer petId, Model model) {
model.addAttribute("pet", petRepository.findOne(petId));
return "pets/read";
}
@RequestMapping(value = { "/pets" }, method = RequestMethod.PUT)
public String update(@Valid @RequestBody Pet pet, Model model) {
petRepository.save(pet);
return "redirect:pets/read/" + pet.getId();
}
@RequestMapping(value = { "/pets/{orderId}" }, method = RequestMethod.DELETE)
public void delete(@PathVariable Integer petId, Model model) {
petRepository.delete(petId);
}
從我的經驗,你可以提交HTML表單或JSON對象作爲@RequestBody
。試一試。
我試圖改變我的設置是這樣的,但只是不斷得到一個「HTTP狀態415 - 服務器拒絕這個請求,因爲請求實體的格式不被所請求的方法()所請求的資源支持」。如果我刪除@RequestBody註釋它工作正常(至少對於表單帖子) – nfvindaloo
刪除'@ RequestBody'並查看HTML表單和JSON是否提交工作。我認爲Spring會爲你處理。無論哪種方式,當你只返回一個'String'時,Spring會將你反射到一個視圖(如果acceptType是HTML)或者將任何'Model'對象轉換爲JSON。 – sbzoom
謝謝,生病了! – nfvindaloo