Невозможно отправить запрос POST в SpringMVC - PullRequest
0 голосов
/ 16 сентября 2018

Я создал API, используя джерси и весеннюю загрузку.Теперь, когда я нажимаю POST-запрос, используя Почтальон со следующим в теле запроса:

{
     "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 ничего не происходит, все еще получая ту же ошибку Что я делаю не так?

Ответы [ 3 ]

0 голосов
/ 16 сентября 2018

Мы должны использовать 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;
    }
0 голосов
/ 16 сентября 2018

404 означает, что запрошенный источник не существует, возможно, из-за одной из следующих причин:

  1. Не существует метода контроллера для обработки запроса POST, поэтому попробуйте изменить значение которого @RequestMapping(value = "/addEmployee", method = RequestMethod.GET) на @RequestMapping(value = "/addEmployee", method = RequestMethod.POST)

  2. попробуйте переместить этот метод и сделать его службой в контроллере restful, используя эту аннотацию @RestController

  3. Я вижу, что вы обращаетесь к этому / api / addEmployee, который, я думаю, не настроен правильно?

0 голосов
/ 16 сентября 2018

После рассмотрения вашего кода проблема в клиентском приложении, где ваш сервер работает на порте 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";
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...