Я устанавливаю простой контроллер RESTful для ресурса Todo с представлением XML.Все отлично работает - пока я не попытаюсь перенаправить.Например, когда я POST
новый Todo и пытаюсь перенаправить на его новый URL (например, /todos/5
, я получаю следующую ошибку:
Error 500 Unable to locate object to be marshalled in model: {}
Я знаю, что POST
работал, потому чтоЯ могу вручную перейти на новый URL (/todos/5
) и увидеть только что созданный ресурс. Это только при попытке перенаправить, что я получаю сбой. Я знаю, что в моем примере я мог просто вернуть только что созданный объект Todo, но у меня естьдругие случаи, когда перенаправление имеет смысл. Ошибка выглядит как проблема с маршалингом, но, как я уже сказал, она возникает, когда я добавляю перенаправления в мои методы RESTful, и не возникает, если вручную нажимать на URL, на который я перенаправляю.
Фрагмент кода:
@Controller
@RequestMapping("/todos")
public class TodoController {
@RequestMapping(value="/{id}", method=GET)
public Todo getTodo(@PathVariable long id) {
return todoRepository.findById(id);
}
@RequestMapping(method=POST)
public String newTodo(@RequestBody Todo todo) {
todoRepository.save(todo); // generates and sets the ID on the todo object
return "redirect:/todos/" + todo.getId();
}
... more methods ...
public void setTodoRepository(TodoRepository todoRepository) {
this.todoRepository = todoRepository;
}
private TodoRepository todoRepository;
}
Можете ли вы определить, что мне не хватает? Я подозреваю, что это может быть связано с возвратом строки перенаправления - возможно, вместо того, чтобы вызвать ее перенаправлениефактически передается в представление XML-маршалинга, используемое моим распознавателем представлений (не показано - но типично для всех онлайн-примеров), и JAXB (настроенныйИнструмент ОХМ) не знает, что с ним делать.Просто предположение ...
Заранее спасибо.