Я новичок в весенних ботинках, мой вопрос очень простой, но я не могу найти, в чем проблема.
У меня есть базовые @GetMapping и @DeleteMapping
@RestController
public class MyController
{
private MyServiceImpl myService;
@Autowired
public MyController(MyServiceImpl myService)
{
this.myService = myService;
}
@GetMapping("/test")
public List<Scan> getTestData(@RequestParam(value = "test_id", required = true) String test_id) {
return myService.findByTestId( test_id );
}
@DeleteMapping("/test")
public int deleteData(@RequestParam(value = "test_id", required = true) String test_id){
return myService.deleteTest( test_id );
}
@DeleteMapping("/test2")
public String deleteArticle() {
return "Test";
}
}
Я тестирую Postman, запрос Get работает, а запрос на удаление - нет. Даже когда я отлаживаю приложение весенней загрузки. Вызывается GetMapping, а удаление не "реагирует" / вызывается.
Возможно, информации недостаточно, но я даже тестировал, что @DeleteMapping ("/ test2") ничего не делает, я имею в виду, я не получаю ответа, а в Postman он остается "загружается ..."
Какие-либо предложения?
Мой полный POM
http://maven.apache.org/xsd/maven-4.0.0.xsd "> 4.0.0
<parent>
<groupId>com.ttt.pdt</groupId>
<artifactId>pdt-base</artifactId>
<version>2.0-SNAPSHOT</version>
</parent>
<artifactId>pdt-service</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.4.0</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.4.0</version>
</dependency>
</dependencies>
<build>
<finalName>${project.artifactId}</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
Родитель (pdt-base) имеет
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.3.RELEASE</version>
</parent>
MyServiceImpl
@Service
public class MyServiceImpl
{
private ScnDao scnDao;
@Autowired
public ScanServiceImpl(ScnDao scnDao){
this.scnDao = scnDao;
}
public int deleteTest( String test_id )
{
return scnDao.deleteTest( test_id );
}
}
public interface ScanDao
{
int deleteTest( String test_id )
}
@Repository
public class ScnPostgres implements ScnDao
{
private JdbcTemplate jdbcTemplate;
@Autowired
public ScnPostgres( JdbcTemplate jdbcTemplate )
{
this.jdbcTemplate = jdbcTemplate;
}
public int deleteTest( String test_id )
{
String SQL = "DELETE FROM scn WHERE test_id = ?";
return jdbcTemplate.update( SQL, new String[] { test_id } );
}
}
@ БорисЖгучев Я только что добавил помпон
что значит not doing anything
? вы получаете ответ любой? может ошибка что ли? Что находится в разделе ответов в Почтальоне?
@DebanikDawn Я только что загрузил изображение почтальона, он просто продолжает "загружаться ...", а у меня нет "реакции" в весенней загрузке
Сначала ваш код даже не компилируется, поскольку в вашем контроллере вы используете test_id
, который внезапно становится parcel_no
. Ваш параметр с именем test_id
не соответствует имени test_no
, которое вы используете в почтальоне. Пожалуйста, введите здесь правильный код и запрос, в настоящее время есть несоответствие.
Я не уверен в этом, но может быть проблема, потому что у вас есть оба GET и отображение DELETE для /test
? Попробуйте сменить сопоставление для удаления на test_delete
или что-то еще и скажите мне.
@ M.Deinum обновлено
Ваш контроллер ожидает "test_id", а вы отправляете "test_no". Можете ли вы изменить это имя переменной? и что ваш MyServiceImpl делает с данными? можешь показать или описать это?
Вы можете показать весь класс, в котором определена функция deleteArticle ()?
@luboskrnac Я только что добавил метод deleteArticle
@ БорисЖгучев Я только что добавил
MyServiceImpl компилируется? Прохладный. :). Попробуйте изменить jdbcTemplate.update( SQL, new String[] { test_id } )
на jdbcTemplate.update( SQL, test_id )
, потому что я не вижу обновления метода с этими символами - api
@ Борис Жгучев На самом деле это сработало, когда я удалил RequestParam (@RequestParam (value = "test_id", required = true) и оставил его как deleteData (). Но мой вопрос ... в DeleteMapping не разрешено иметь RequestParam ??
Ага. ты прав. Мой ответ ниже.
Как в комментариях к SPR описано SPR-16874:
it does not support DELETE currently. It would be a trivial change to make. There is suggested a workaround:
@DeleteMapping(value = "/greeting")
public Greeting handle(@RequestBody MultiValueMap<String, String> params) {
return new Greeting(counter.incrementAndGet(),
String.format(template, params));
}
Как видите, проблема был открыт в трекере весенней загрузки.
Спасибо! позвольте мне попробовать :)
какую версию весенней загрузки вы используете? Можешь показать весь пом?