[AngularJS][JavaEE]如何使用$http.post()发送多个数据

[AngularJS][JavaEE] How to send multiple data with $http.post()

本文关键字:数据 http JavaEE AngularJS 何使用 post      更新时间:2023-09-26

我在一个web应用程序上工作,我有一个发送数据的问题,我没有找到一些例子。我使用AngularJS和JavaEE。

:

AngularJs:

quiz是一个对象。

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

}

我需要另一个参数在我的函数create:

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是一个对象。我试着转换测验,但我不工作,

可以像下面这样传递多个Data

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

下面是一个更好的例子

要将json中的多个列表发送到rest api,请使用以下代码

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

和控制器

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

SeetingsModel类是这样的

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

}