如何使用Spring 4 Rest Controller为Jsp视图服务?

我已经创建了Spring 4项目来构建rest服务。 所以我已经创建了超过50个rest服务,现在需要为此创建web-app。 所以我想重用相同的控制器,所以我只需要编写视图(JSP)代码。

为了同样我用Google搜索并找到了http://www.mkyong.com/spring-mvc/spring-3-mvc-contentnegotiatingviewresolver-example/,但这给了我一个错误。 Morover我的项目结构如下。

在此处输入图像描述 那么我需要在servlet-context.xml中编写这个配置? 实现的最佳方式是什么?

主要是我只需要输出Json和html。 所以它的我的http请求有一个扩展名.json和.jsp。

下面是我的一个控制器的代码。 下面是我创建Rest服务的方式,现在我希望这个方法与JSP页面的服务器相同。

package com.alumini.spring.controller; import java.util.ArrayList; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import com.alumini.spring.DAO.CourseDAO; import com.alumini.spring.model.Alumini; import com.alumini.spring.model.Course; @RestController public class CourseController { @Autowired private CourseDAO courseDao; @RequestMapping(value = "/getCourseList") public List getCourseList(@RequestParam("email") String email,@RequestParam("password") String password) { List listCourse = courseDao.list(); List finalList= new ArrayList(); for(Course course: listCourse) { finalList.add(course); } return finalList; } } 

如果你们之前有人这么做的话,请帮助我吗?

 package com.apmc.rest; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.codehaus.jackson.map.ObjectMapper; import org.hibernate.SessionFactory; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import com.apmc.Generic.CommonMethods; import com.apmc.domain.Auction; import com.apmc.domain.Commodity; import com.apmc.jsonObjectMaker.GetEntryDetails; import com.apmc.services.AuctionService; import com.apmc.services.CommodityService; @RestController @RequestMapping("auction") public class RestAuctionController { List show_egp_for_auction; String successMsg = ""; String errorMsg = ""; List listOfComm; private List show_details_trd; JSONObject msg; @Autowired AuctionService auctionService; @Autowired CommodityService commodityService; @RequestMapping(value="/commoditySelect", method = RequestMethod.GET, headers="Accept=application/json") public String commSelect() { listOfComm = new ArrayList(); try { listOfComm = commodityService.loadAll(); SessionFactory commSessionFactory = commodityService.getThisSessionFactory(); Map map = new HashMap(); map.put("comm_id", "getComm_id"); map.put("comm_name", "getComm_name"); JSONObject comm_json_Obj = CommonMethods.getJSONFromList(Commodity.class, listOfComm, commSessionFactory, "commodities", map); return comm_json_Obj.toString(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); return null; } } @RequestMapping(value = "/auctionByEntryGatePass", method = RequestMethod.POST, produces="application/json", consumes="application/json") public @ResponseBody String check_egp(@RequestBody String json) { try { show_egp_for_auction = new ArrayList(); JSONObject egp_no_json = new JSONObject(json); String egp_no = (String) egp_no_json.get("egp_no"); Long comm_id = Long.parseLong(egp_no_json.get("comm_id").toString()); String comm_name = (String) egp_no_json.get("comm_name"); if(egp_no.isEmpty()) { successMsg = ""; errorMsg = "Data is remaining or wrong."; msg = new JSONObject(); msg.put("errorMsg", errorMsg); msg.put("egp_no_error", "Please enter Entry Gate Pass Number"); return msg.toString(); } show_egp_for_auction = auctionService.egp_info_for_auction(egp_no, comm_id); successMsg = ""; errorMsg = ""; if(show_egp_for_auction.size() == 0) { errorMsg = "This is not a valid entry gate pass either This entry gate pass have not this commodity."; } else if(show_egp_for_auction.get(0)[7] != null) { errorMsg = "This commodity have already auctioned."; } else if(show_egp_for_auction.size() > 1) { errorMsg = " New tolmapEntrybyEntryGatePass Error \n Please contact Admin and errorcode: "; } else { errorMsg = ""; successMsg = "Success"; } msg = new JSONObject(); msg.put("successMsg", successMsg); msg.put("errorMsg", errorMsg); if(errorMsg.isEmpty()) { GetEntryDetails GetEntryDetailsForAuc = new GetEntryDetails(comm_name, show_egp_for_auction.get(0)[0].toString(), show_egp_for_auction.get(0)[5].toString(), show_egp_for_auction.get(0)[4].toString(), show_egp_for_auction.get(0)[2].toString(), show_egp_for_auction.get(0)[3].toString()); // return new ResponseEntity(HttpStatus.CREATED); JSONArray egp_details = new JSONArray(); egp_details.put(msg); egp_details.put(GetEntryDetailsForAuc.getJSON()); return egp_details.toString(); } else { return msg.toString(); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); return "ERROR"; } } @RequestMapping(value = "/auction_confirm", method = RequestMethod.POST, produces="application/json", consumes="application/json") public @ResponseBody String auctionConfirm(@RequestBody String auction_json) { successMsg = ""; errorMsg = ""; Long auc_trd_no; Double auc_commRate; JSONObject auction = new JSONObject(auction_json); String auc_trd_no_error = ""; String auc_commRate_error = ""; Object a = auction.get("auc_trd_no"); Object b = auction.get("auc_commRate"); if(auction.get("auc_trd_no").toString().isEmpty()) { auc_trd_no = 0l; } else { try { auc_trd_no = Long.parseLong(auction.get("auc_trd_no").toString()); } catch (NumberFormatException nfe) { auc_trd_no = 0l; } } if(auction.get("auc_commRate").toString().isEmpty()) { auc_commRate = 0d; } else { try { auc_commRate = Double.parseDouble(auction.get("auc_commRate").toString()); } catch(NumberFormatException nfe) { auc_commRate = 0d; } } int error_counter = 0; boolean auc_mul_comm = false; if(auc_commRate == 0d) { successMsg = ""; errorMsg = "Data is remaining or wrong."; auc_commRate_error = "Please enter Auction Commodity Rate or enter valid Auction Commodity Rate."; error_counter = 1; } if(auc_trd_no == 0l) { successMsg = ""; errorMsg = "Data is remaining or wrong."; auc_trd_no_error = "Please enter Trader Id Number or enter valid Trader Id Number."; error_counter = 1; } if(error_counter == 1) { msg = new JSONObject(); msg.put("errorMsg", errorMsg); msg.put("auc_trd_no_error", auc_trd_no_error); msg.put("auc_commRate_error", auc_commRate_error); return msg.toString(); } else { try { show_details_trd = new ArrayList(); show_details_trd = auctionService.trd_check(auc_trd_no); //logger.info("\n\n\n\n\n\n"); //logger.info(show_egp.get(0)[6].toString()); //logger.info(show_egp+" : "+show_egp.size()); if(show_details_trd.size() == 0) { errorMsg = "This is not a valid Trader's Id number."; } else if(show_details_trd.size() > 1) { errorMsg = " New tolmapEntrybyEntryGatePass Error \n Please contact Admin "; } else { errorMsg = ""; } if(errorMsg != "") { successMsg = ""; auc_trd_no_error = ""; auc_commRate_error = ""; msg = new JSONObject(); msg.put("errorMsg", errorMsg); return msg.toString(); } } catch (Exception e) { // TODO Auto-generated catch block msg = new JSONObject(); msg.put("errorMsg", e.getMessage()); return msg.toString(); } successMsg = "Entry Gate Pass submitted successfully."; errorMsg = ""; auc_trd_no_error = ""; auc_commRate_error = ""; msg = new JSONObject(); msg.put("successMsg", successMsg); return msg.toString(); } } @RequestMapping(value = "/auction_add", method = RequestMethod.POST, produces="application/json", consumes="application/json") public @ResponseBody String saveOrUpdateAuction(@RequestBody String auction_json) { try { String pattern = "yyyy-MM-dd HH:mm:ss"; SimpleDateFormat df = new SimpleDateFormat(pattern); ObjectMapper objMapper = new ObjectMapper(); objMapper.setDateFormat(df); Auction auction = (Auction)objMapper.readValue(auction_json, Auction.class); auctionService.saveOrUpdate(auction, false); successMsg = "Auctioned Successfully."; errorMsg = ""; msg = new JSONObject(); msg.put("successMsg", successMsg); return msg.toString(); } catch(JSONException je) { je.printStackTrace(); successMsg = ""; errorMsg = je.getMessage(); msg = new JSONObject(); msg.put("errorMsg", errorMsg); return msg.toString(); } catch (Exception e) { e.printStackTrace(); successMsg = ""; errorMsg = e.getMessage(); msg = new JSONObject(); msg.put("errorMsg", errorMsg); return msg.toString(); } } } 

就像@Sotirios Delimanolis这样说:

你不应该。 @RestController并不意味着返回视图。 这意味着返回将直接写入响应主体的内容。

如果确实需要,可以声明方法具有View或ModelAndView的返回类型,并返回具有标识视图名称的相应对象。