Я новичок в Spring MVC, и я раскрываю службы REST. Мои службы GET работают нормально, но вызов POST от Postman отправляет пустые значения null в виде полей.

Ниже приведен пример службы REST, использующей различные формы аннотаций POST. Я застрял на этом последние 3 дня. Пожалуйста помоги.

package com.cgi.ehr.rest;

import javax.ejb.EJB;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import com.cgi.ehr.services.dao.UserDetailsDAO;
import com.cgi.test.dto.InputDto;

@RestController
@RequestMapping("/bookmarks")
public class CheckingService {

    @EJB
    UserDetailsDAO userDetailsDAO;

    @RequestMapping(value = "/bookmark", method = RequestMethod.GET)

    public InputDto testM() {

        return userDetailsDAO.testMethod();
    }

    @RequestMapping(value = "/testM2", method = RequestMethod.GET,headers="Accept=*/*",  produces="application/json")
    //@Produces(MediaType.APPLICATION_JSON)
    public InputDto testM2() {
        InputDto d = new InputDto("1","2");
        return d;
    }

    @RequestMapping(value = "/bookmarkPost", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON)
    @Produces(MediaType.APPLICATION_JSON)
    //@ResponseBody
    public InputDto testPost(InputDto inputDto) {
        String age = inputDto.getTestAge();
        String name = inputDto.getTestname();
        InputDto dto = new InputDto();
        dto.setTestAge(age + "gotback");
        dto.setTestname(inputDto.getTestname() + "gotback");

        return dto;
    }


    @RequestMapping(value = "/bookmarkPost1", method = RequestMethod.POST)
    public InputDto testPost1(InputDto inputDto) {
        String age = inputDto.getTestAge();
        String name = inputDto.getTestname();
        InputDto dto = new InputDto();
        dto.setTestAge(age + "gotback");
        dto.setTestname(inputDto.getTestname() + "gotback");

        return dto;
    }


    @RequestMapping(value = "/person", method = RequestMethod.POST, headers = "Accept=application/xml, application/json")
    public @ResponseBody InputDto addPerson(@RequestBody InputDto inputDto) {
        return inputDto;
    }

}
`

    package com.cgi.test.dto;

import java.io.Serializable;

import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
public class InputDto implements Serializable{


    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    private String testname;
    private String testAge;
    public String getTestname() {
        return testname;
    }
    public void setTestname(String testname) {
        this.testname = testname;
    }
    public String getTestAge() {
        return testAge;
    }
    public void setTestAge(String testAge) {
        this.testAge = testAge;
    }
    public InputDto() {
        super();
    }
    public InputDto(String testname, String testAge) {

        this.testname = testname;
        this.testAge = testAge;
    }


}

enter image description here

1
CoderEnthusiast 4 Сен 2016 в 11:54

3 ответа

Лучший ответ

Ваш метод testPost должен выглядеть, как показано ниже. Теперь вы можете использовать тот же запрос с помощью Postman.

          @RequestMapping(value = "/bookmarkPost", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE,consumes = MediaType.APPLICATION_JSON_VALUE)
          public @ResponseBody InputDto testPost(@RequestBody InputDto inputDto) {
               String age = inputDto.getTestAge();
               String name = inputDto.getTestname();
               InputDto dto = new InputDto();
               dto.setTestAge(age + "gotback");
               dto.setTestname(name + "gotback");
               return dto;
    }
1
abaghel 4 Сен 2016 в 11:25

В вашем классе InputDto ваши установщики правильно устанавливают переменную экземпляра this.testXxx

public void setTestname(String testname) {
    this.testname = testname;
}

Однако ваши геттеры не возвращают эту переменную экземпляра. Обратите внимание на ваш отсутствующий this.. Следующее должно исправить вашу текущую проблему, а затем применимо к обоим геттерам.

public String getTestAge() {
    return this.testAge;
}
0
Thernys 4 Сен 2016 в 13:19

Извините, ребята ... код работал все время, я делал очень глупую ошибку при отправке данных сообщения в почтальоне (я выбрал неправильную вкладку и не отправил ее в "теле") ... я потратил 3 дня на это !!!! .. в любом случае еще раз спасибо @abaghel

0
CoderEnthusiast 5 Сен 2016 в 11:44