Я создаю простое приложение crud, используя только сервлет API. Я не хочу использовать JAX-RS или Spring. Приложение имеет дело только с объектом Time Period, который имеет время начала и тип активности.
Ошибка, которую я получаю ниже
java.lang.NumberFormatException: null
Ошибка бьет по приведенному ниже коду из метода doPost.
int startTimeInt = Integer.parseInt(startTime);
Когда я закомментирую все, чтодает мне ошибку, и я пытаюсь код ниже. Это показывает как ноль.
System.out.println(request.getParameter("timePeriodId")); --->null
System.out.println(request.getParameter("activityType")); --->null
Почему информация POST недоступна в запросе.
Я изучил предварительный запрос CORS, но ничего не понял.
Мой бэкэнд ниже.
package com.jeffstrunk.TimeTrackerWServlets;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.google.gson.Gson;
@WebServlet("/TimePeriodController/*")
public class TimePeriodController extends HttpServlet {
private static final long serialVersionUID = 1L;
private String url = "jdbc:mysql://localhost/jeffstrunkcom?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC";
private String userName = "root";
private String pass = "pass";
private TimePeriodDAO timePeriodDAO = new TimePeriodDAO(url, userName, pass);
Gson gson = new Gson();
public TimePeriodController() {
super();
}
private void sendAsJson(HttpServletResponse response, Object obj) throws IOException {
response.setContentType("application/json");
String res = gson.toJson(obj);
PrintWriter out = response.getWriter();
out.print(res);
out.flush();
}
@Override
protected void doOptions(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
setAccessControlHeaders(resp);
resp.setStatus(HttpServletResponse.SC_OK);
}
private void setAccessControlHeaders(HttpServletResponse resp) {
resp.setHeader("Access-Control-Allow-Origin", "*");
resp.setHeader("Access-Control-Allow-Methods", "GET, OPTIONS, HEAD, PUT, POST, DELETE");
resp.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, Authorization");
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("doGet reached");
setAccessControlHeaders(response);
String pathInfo = request.getPathInfo();
String uri = request.getRequestURI();
List<TimePeriod> timePeriods = new ArrayList();
try {
timePeriods = timePeriodDAO.getAllTimePeriods();
} catch (SQLException e) {
e.printStackTrace();
}
if(pathInfo == null || pathInfo.equals("/")){
System.out.println("path info is null");
System.out.println("uri: " + uri);
System.out.println("pathInfo: " + pathInfo);
try {
timePeriodDAO.connect();
} catch (SQLException e1) {
e1.printStackTrace();
}
sendAsJson(response, timePeriods);
}
String[] splits = pathInfo.split("/");
if(splits.length == 2){
TimePeriod timePeriod = new TimePeriod();
try {
String stringId = splits[1];
int id = Integer.parseInt(stringId);
System.out.println("Id = " + id);
timePeriod = timePeriodDAO.getTimePeriod(id);
sendAsJson(response, timePeriod);
} catch (SQLException e) {
e.printStackTrace();
}
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("doPost reached");
setAccessControlHeaders(response);
String pathInfo = request.getPathInfo();
System.out.println("pathInfo: " + pathInfo);
String startTime = request.getParameter("timePeriodId");
int startTimeInt = Integer.parseInt(startTime);
String activity = request.getParameter("activityType");
System.out.println("startTime: " + startTime);
System.out.println("activity: " + request.getParameter("activityType"));
if(pathInfo == null || pathInfo.equals("/")){
TimePeriod timePeriod = new TimePeriod();
ActivityType activityEnum = Enum.valueOf(ActivityType.class, activity);
timePeriod.setActivity(activityEnum);
timePeriod.setStartTime(startTimeInt);
try {
timePeriodDAO.insertTimePeriod(timePeriod);
} catch (SQLException e) {
e.printStackTrace();
}
}
else {
response.sendError(HttpServletResponse.SC_BAD_REQUEST);
return;
}
}
}
Мой фронтэнд ниже.
function post(){
console.log("post file reached")
const url = 'http://localhost:8080/TimeTrackerWServlets/TimePeriodController/'
const Data = {
timePeriodId: "999",
activityType: "ANIME"
};
const otherPram = {
headers: {
"content-type" : "application/json; charset=UTF - 8"
},
body : Data, //JSON.stringify(Data)
method: "POST",
};
fetch(url, otherPram)
.then(data=>{return data.json})
.then(res=>console.log(res))
.catch(error=>console.log(error))
}
HTML ниже.
<button onclick="post()">Post</button>