Witam wszystkich. Jestem nowym członkiem forum oraz zaczynam swoją przygodę z technologiami REST. Wybrałem do projektu powyższe technologie. I mam małą zagwozdkę;). Tworze proste API RESTowe które na tą chwile wygląda następująco.
@Controller
public class WorkersController {
@Autowired
public DatabaseService dbService;
@ResponseBody
@RequestMapping(value="/workers", method = RequestMethod.GET, produces = "application/json")
public ArrayList<Worker> getAllWorkersFromDatabase() {
}
@ResponseBody
@RequestMapping(value="/workers/new", method = RequestMethod.POST, produces = "application/json", consumes="application/json")
public String saveWorker(@RequestBody final WorkerDTO workerDto) {
}
@ResponseBody
@RequestMapping(value="/workers/{workerid}", method = RequestMethod.GET, produces = "application/json")
public Worker getWOrkerByDatabaseId(@PathVariable Integer workerid) {
}
@ResponseBody
@RequestMapping(value="/workers/{workerid}/edit", method = RequestMethod.PUT, produces = "application/json")
public String editWorker(@PathVariable Integer workerid, @RequestBody Worker worker) {
}
}
Jeżeli chodzi o pobieranie danych za pomocą metod http GET wszystko działa, natomiast mam problem z wykonaniem POSTów. Kiedy próbuje wywołać metodę saveWorker() dostaję:
The server refused this request because the request entity is in a format not supported by the requested resource for the requested method
Zaimportowałem do projektu poniższe biblioteki:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>${jackson.version}</version>
</dependency>
Wydaje mi się że problem leży w konfiguracji, brakuje mi poprawnie skonfigurowanego Mappera dla @RequestBody i dlatego nie mapuje mi do WorkerDTO. Od springa 3.2 zmieniło się wsparcie dla jacksona 2, i stare rozwiązania nie działają. Moja konfiguracja wygląda następująco, jest ona zaciągnięta z tutoriala i najpewniej błędna w moim przypadku:
@Configuration
@ComponentScan(basePackages = "org.schedule.service")
@EnableWebMvc
@Import(DatabaseSpringConfig.class)
public class ServiceSpringConfig extends WebMvcConfigurerAdapter {
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
MappingJacksonHttpMessageConverter mappingJacksonHttpMessageConverter = new MappingJacksonHttpMessageConverter();
mappingJacksonHttpMessageConverter.setPrefixJson(false);
mappingJacksonHttpMessageConverter.setPrettyPrint(true);
converters.add(mappingJacksonHttpMessageConverter);
}
}
Klasa WorkerDTO zawiera dwa pola string, settery i gettery, konstruktor oraz jest serializowana. Bardzo proszę o jakąś poradę.