【发布时间】:2017-02-06 04:57:03
【问题描述】:
我在一个 webapp 上工作,我有一个发送数据的问题,但我没有找到一些例子。我使用 AngularJS 和 JavaEE。
现在:
AngularJs:
测验是一个对象。
roomFactory.create = function(quiz){
//item.idLesson = $stateParams.lessonid;
return $http.post("/api/private/room/create",quiz)
.then(function (response){
roomFactory.room = response.data;
return roomFactory.room;
},function (response){
$q.reject(response);
});
};
小服务程序:
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//get the identity of the one who send the request
Map<String, Object> payload = AppConfig.getRequestPayload(request);
//objetMapper --> use to add request....
ObjectMapper objectMapper = new ObjectMapper();
Random randomGenerator;
// Number of question for the two sets
int nbQuestion = 0;
List<Question> questionsRandom = new ArrayList<>();
//Get object from request
//List<String> list = objectMapper.readValue(AppConfig.getJsonRequest(request), new TypeReference<List<String>>(){});
//List<Quiz> list2 = objectMapper.readValue(AppConfig.getJsonRequest(request), new TypeReference<List<Quiz>>(){});
//String name = list.get(0);
Quiz quiz = objectMapper.readValue(AppConfig.getJsonRequest(request),Quiz.class);
if (quiz.getDuration() == null) {
quiz.setDuration(-1);
}
//LOGGER.info("getIdLesson : ");
//Get list of question from datastore
List<Question> questions = ofy().load().type(Question.class).filter("idLesson", quiz.getIdLesson()).list();
//Take some questions from the list to make the quiz
if (!questions.isEmpty()) {
if (questions.size() < quiz.getNbQuestion()) {
nbQuestion = questions.size();
} else {
nbQuestion = quiz.getNbQuestion();
}
// we peek all the question randomly to the server and create a list of question
while (nbQuestion > 0) {
randomGenerator = new Random();
int index = randomGenerator.nextInt(questions.size());
questionsRandom.add(questions.get(index));
questions.remove(questions.get(index));
nbQuestion--;
}
if (!questionsRandom.isEmpty()) {
//Set the quiz
quiz.setQuestions(questionsRandom);
quiz.setNbQuestion(questionsRandom.size());
Lesson lesson = ofy().load().type(Lesson.class).id(Long.valueOf(quiz.getIdLesson())).now();
//Lesson lesson = ofy().load().type(Lesson.class).filter("idLesson", quiz.getIdLesson()).first().now();
//SET the room
//User user = ofy().load().type(User.class).id(Long.valueOf(jsonUserId.toString())).now();
User user = ofy().load().type(User.class).filter("email", payload.get("email").toString()).first().now();
//LOGGER.info("User : "+user.getFirstName());
Room room = new Room(user, quiz, 60);
room.calculTimeToFinishTheQuiz();
room.setName(lesson.getTitle() + RoomManager.roomNumber);
room.setId(quiz.getIdLesson() + RoomManager.roomNumber);
//Save the room in RoomManager
RoomManager.roomNumber++;
RoomManager.addNewRoom(quiz.getIdLesson(), room);
//Send the room in response
String json = objectMapper.writeValueAsString(room);
response.setContentType("application/json");
response.getWriter().write(json);
}
}
}
}
我的函数创建中需要另一个参数:
roomFactory.create = function(quiz, roomName){
我尝试这样发送两个数据:
return $http.post("/api/private/room/create",quiz, roomName)
或
return $http.post("/api/private/room/create",[quiz, roomName])
在 Servlet 中获取数据:
第一个解决方案:
String roomName= objectMapper.readValue(AppConfig.getJsonRequest(request),String.class);
第二种解决方案:
List<String> list = objectMapper.readValue(AppConfig.getJsonRequest(request), new TypeReference<List<String>>(){});
String roomName = list.get(0);
roomName = roomName.replace("\"", "");
但第二个不起作用,因为 quiz 是一个对象。我尝试转换测验,但效果不佳。
【问题讨论】:
标签: javascript angularjs servlets java-ee-6