spring вставьте строку в таблицу mysql, используя пружину JDBCTemplate - PullRequest
0 голосов
/ 20 марта 2020

Я пытаюсь создать новую строку в таблице "ride" из приложения Spring и получаю следующую ошибку

{
org.springframework.web.client.HttpServerErrorException: 500 null

    at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:94)
    at org.springframework.web.client.RestTemplate.handleResponse(RestTemplate.java:700)
    at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:653)
    at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:613)
    at org.springframework.web.client.RestTemplate.put(RestTemplate.java:432)
    at com.pluralsight.controller.RestControllerTest.testCreateRide(RestControllerTest.java:24)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:566)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
    at org.junit.internal.runners.statements.FailOnTimeout$CallableStatement.call(FailOnTimeout.java:298)
    at org.junit.internal.runners.statements.FailOnTimeout$CallableStatement.call(FailOnTimeout.java:292)
    at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
    at java.base/java.lang.Thread.run(Thread.java:834)
}

Я использую шаблон отдыха, чтобы добавить информацию в mysql таблица такова:

    RestTemplate restTemplate = new RestTemplate();

    Ride ride = new Ride();
    ride.setName("Bobsled Trail");
    ride.setDuration(33);

    restTemplate.put("http://localhost:8080/ride_tracker/ride", ride);

    System.out.println("Ride: " + ride);

Весь код проекта можно найти по ссылке ниже: https://github.com/roscasend/ride_tracker

С наилучшими пожеланиями, Аврелиан

Ответы [ 2 ]

0 голосов
/ 16 апреля 2020

Согласно вашему коду, ваш репозиторий возвращает нулевой объект и сервер, пытающийся преобразовать нулевой объект в @ResponseBody. Попробуйте обработать нуль в вашем коде в методе ниже в RideController. java. или используйте @ResponseBodyNull вместо @ ResponseBody.

@RequestMapping(value = "/ride",  method = RequestMethod.PUT)
public @ResponseBody Ride createRide(@RequestBody Ride ride) {
    return rideService.createRide(ride);
}
0 голосов
/ 20 марта 2020

Прежде всего, в качестве стандарта мы должны использовать POST для вставки и PUT для операций обновления. Эта ошибка возникает, когда проблема возникает на стороне сервера. (Состояние HTTP 500 - Внутренняя ошибка сервера)

Труднее сказать, что происходит, посмотрев на клиентскую часть. Поэтому, пожалуйста, опубликуйте трассировку стека ошибок сервера.

Также заметил, что массив объектов дает параметры в вашем запросе новый объект [] {firstName, lastName}

jdbcTemplate.update("insert into ride (name, duration) values (?,?)", new Object[] { ride.getName(), ride.getDuration()}); 
...