Я создал API, используя трикотаж и пружинный ботинок. Теперь, когда я нажимаю запрос POST с помощью Postman со следующим в теле запроса:
{
"name":"something", "email":"something","location":"something","dateOfBirth":"something"
}
Оно работает. Функция сохранения этих данных:
@POST
@Path("/addEmployee")
@Produces(MediaType.TEXT_PLAIN)
public String addEmployee(@RequestBody Employee employee) {
service.save(employee);
return "Saved Successfully";
}
Модель сотрудника:
@Entity
@Table(name = "employee")
@XmlRootElement(name = "employee")
@EntityListeners(AuditingEntityListener.class)
public class Employee {
public Employee() {
}
@Id
@Column(nullable = false, name = "id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(nullable = false, name = "name")
private String name;
@Column(nullable = false, name = "email")
private String email;
@Column(nullable = false, name = "location")
private String location;
@Column(nullable = false, name = "DOB")
private String dateOfBirth;
// getters and setters
Этот api вызывается следующей функцией на стороне клиента:
@RequestMapping(value = "/addEmployee", method = RequestMethod.GET)
public ModelAndView addEmployee(ModelAndView model) {
RestTemplate restTemplate = new RestTemplate();
String url = "http://localhost:8080/api/addEmployee";
EmployeeInfo employee = new EmployeeInfo();
employee.setName("Ashish");
employee.setEmail("anyhing");
employee.setDateOfBirth("mybirthday");
employee.setLocation("home");
ResponseEntity<String> response = restTemplate.postForEntity(url, employee, String.class);
model.setViewName("homePage");
return model;
}
Класс информации о сотруднике:
public class EmployeeInfo {
private String name;
private String email;
private String location;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
Я получаю следующую ошибку:
2018-09-16 15:57:13.706 ERROR 14892 --- [nio-8080-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.web.client.HttpClientErrorException: 404 null] with root cause
org.springframework.web.client.HttpClientErrorException: 404 null
at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:86) ~[spring-web-4.3.19.RELEASE.jar:4.3.19.RELEASE]
at org.springframework.web.client.RestTemplate.handleResponse(RestTemplate.java:708) ~[spring-web-4.3.19.RELEASE.jar:4.3.19.RELEASE]
at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:661) ~[spring-web-4.3.19.RELEASE.jar:4.3.19.RELEASE]
at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:621) ~[spring-web-4.3.19.RELEASE.jar:4.3.19.RELEASE]
at org.springframework.web.client.RestTemplate.postForEntity(RestTemplate.java:415) ~[spring-web-4.3.19.RELEASE.jar:4.3.19.RELEASE]
at com.example.controller.Home.addEmployee(Home.java:82) ~[classes/:na]
и такой длинный список.
Форма, которая вызывает это:
<form name = "myform" method = "post" action = "addEmployee" >
<input type = "submit" value = "Save">
</form>
Обновлено: при изменении метода на стороне клиента = RequestMethod.GET на RequestMethod.POST ничего не происходит, но все равно появляется такая же ошибка Что я делаю не так?
используйте режим проверки браузера, при нажатии кнопки отправки проверьте консоль браузера, какой запрос был сделан.
См. stackoverflow.com/a/36600434/2587435 о сопоставлении по умолчанию / ошибка и 404 для каждого твой комментарий




После проверки вашего кода проблема находится в приложении на стороне клиента, где ваш сервер работает на порту 8090, а в api, который вы вызываете, имеет 8080 для addEmployee.
Измените этот String url = "http://localhost:8080/api/addEmployee"; на String url = "http://localhost:8090/api/addEmployee";, и все будет хорошо.
@RequestMapping(value = "/addEmployee", method = RequestMethod.GET)
public String addEmployee(ModelAndView model) {
RestTemplate restTemplate = new RestTemplate();
String url = "http://localhost:8090/api/addEmployee";
EmployeeInfo employee = new EmployeeInfo();
employee.setName("Ashish");
employee.setEmail("anyhing");
employee.setDateOfBirth("mybirthday");
employee.setLocation("home");
System.out.println("WE HAVE REACHED HERE");
String response = restTemplate.postForObject(url, employee, String.class);
System.out.println(response);
return "redirect:/home";
}
Эй, я все еще получаю ту же ошибку, изменил метод запроса на POST. Страница ошибки Whitelabel В этом приложении нет явного сопоставления для / error, поэтому вы рассматриваете это как запасной вариант. Вс, 16 сентября, 16:27:58 IST 2018 Произошла непредвиденная ошибка (тип = внутренняя ошибка сервера, статус = 500). 404 null
извините, пока оставьте GET и можете ли вы изменить restTemplate.postForObject вместо restTemplate.postForEntity
Да, изменено на restTemplate.postForEntity, но все равно ошибка
хм, это у вас контроллер называется (вы отлаживали) ?? просто проверьте, изменив на application / json из @Produces (MediaType.TEXT_PLAIN) или удалите его для поведения по умолчанию, можете ли вы поделиться своим демонстрационным кодом на github, я могу проверить ..
Можете ли вы попробовать мой обновленный ответ, если он не работает, тогда поделитесь кодом на github, я проверю
проверить это github.com/gautam2705/JerseyAPIgithub.com/gautam2705/clientToCallAPI
@ A.Gautam Проверьте мой обновленный ответ, вы сможете исправить это.
Мы должны использовать RequestMethod.POST вместо RequestMethod.GET
@RequestMapping(value = "/addEmployee", method = RequestMethod.POST)
public ModelAndView addEmployee(ModelAndView model) {
RestTemplate restTemplate = new RestTemplate();
String url = "http://localhost:8080/api/addEmployee";
EmployeeInfo employee = new EmployeeInfo();
employee.setName("Ashish");
employee.setEmail("anyhing");
employee.setDateOfBirth("mybirthday");
employee.setLocation("home");
ResponseEntity<String> response = restTemplate.postForEntity(url, employee, String.class);
model.setViewName("homePage");
return model;
}
Вот полный пример journaldev.com/3358/…
Эй, я изменил тип methid на POST, но все равно получаю ту же ошибку.
404 означает, что запрошенный источник не существует по одной из следующих причин:
Не существует метода контроллера для обработки запроса POST, поэтому попробуйте изменить which@RequestMapping(value = "/addEmployee", method = RequestMethod.GET) на @RequestMapping(value = "/addEmployee", method = RequestMethod.POST)
попробуйте переместить этот метод и сделать его службой в спокойном контроллере, используя эту аннотацию @RestController
Я вижу, что вы обращаетесь к этому / api / addEmployee, который, как мне кажется, настроен неправильно?
Эй, 1. изменил GET на POST, но это не решило проблему. 2. Хорошо, я попробую это, скоро сообщу вам. 3. Но этот маршрут работает должным образом, если я отправлю запрос POST с помощью почтальона.
Я предлагаю поместить всю вашу успокаивающую службу на спокойный Контроллер, чтобы упростить возврат ответа в формате JSON.
Мы должны использовать RequestMethod.POST вместо Request Method.GET.