1

I work on a webapp, i have a probleme to send data and i didn't find some example. I use AngularJS and JavaEE.

Now :

AngularJs :

quiz is an object.

 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);
        });
};

Servlet :

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);
        }
    }
}

}

I need another parameter in my fonction create :

roomFactory.create = function(quiz, roomName){

I try this to send both data :

return $http.post("/api/private/room/create",quiz, roomName)

or

return $http.post("/api/private/room/create",[quiz, roomName])

Get data in Servlet :

first solution :

String roomName= objectMapper.readValue(AppConfig.getJsonRequest(request),String.class);

second solution :

List<String> list = objectMapper.readValue(AppConfig.getJsonRequest(request), new TypeReference<List<String>>(){});

    String roomName = list.get(0);
    roomName = roomName.replace("\"", "");

but the second didn't work because quiz is an object. I try to convert quiz but i didn't work as well.

2 Answers 2

1

You can pass multiple Data as follow

var Indata = {'pram1': 'value1', 'pram2': 'value2' };
$http.post("/api/private/room/create", Indata)
.then(function (response){
        roomFactory.room = response.data;
        return roomFactory.room;
    },function (response){
        $q.reject(response);
    });

Here is the better example

Sign up to request clarification or add additional context in comments.

3 Comments

Thank you. I saw this solution but how i can get Indata in the servlet ? Is it possible with objectMapper.readValue ?
And i have another problem because quiz = {idLesson : $stateParams.lessonid, nbPeople:1, duration: null, nbQuestion : 10, id : null, questions : null};
Please take a look into example link there is a good example with class
0

For sending multiple list in the json to rest api use this code

var settings1 = {pram1: 'value1', pram2: 'value2',pram3: 'value3'};
var settings2 = {pram1: 'value1', pram2: 'value2',pram3: 'value3'};
var settings3 = {pram1: 'value1', pram2: 'value2',pram3: 'value3'};
var listObj = [settings1,settings2,settings3];
$http.post("/api/private/room/create",listObj)
.then(function (response){
    roomFactory.room = response.data;
    return roomFactory.room;
},function (response){
    $q.reject(response);
});

and in the controller

@RequestMapping(value = "/api/private/room/create", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
ResponseEntity createRequest(@RequestBody List<SettingsModel> settingsList) {

}

SeetingsModel class is like this

public class SettingsModel {
    private String param1;
    private String param2;
    private String param3;
    public String getParam1() {
        return param1;
    }
    public void setParam1(String param1) {
        this.param1 = param1;
    }
    public String getParam2() {
        return param2;
    }
    public void setParam2(String param2) {
        this.param2 = param2;
    }
    public String getParam3() {
        return param3;
    }
    public void setParam3(String param3) {
        this.param3 = param3;
    }


}

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.