2015-01-26 1 views
1

У меня есть два способа управления, показанные ниже, /garages/a работает, когда я отправляю JSON (ответ 200), но /garages/a/brand дает 404. Они отличаются только значением отображения.Два метода контроллера пружины, один возвращается 200, другие возвраты 404. Только различаются по URL-адресу сопоставления

Я использую Spring 4.1.4.RELEASE и конфигурацию Java. Я не использую Spring Boot.

методы контроллера:

@RequestMapping(value = "/garages/a", method = RequestMethod.POST, headers = "Content-Type = application/json", produces = "application/json") 
public Garage specificGaragePost(
@RequestBody Garage garage) { 
    return garage; 
} 

@RequestMapping(value = "/garages/a/brand", method = RequestMethod.POST, headers = "Content-Type = application/json", produces = "application/json") 
public Garage specificGarageBrandPost(
    @RequestBody Garage garage) { 
    return garage; 
} 

класс Garage

public class Garage { 
    private String id; 
    private String brand; 
    private List<Fuel> fuels; 
    private double[] location; 

    //Getters and setters left out for brevity 

Пример JSON (работает для/гаражей/в URL, но не/гаражи/а/бренд)

{ 
    "id": "some-id", 
    "brand": "brand", 
    "fuels": [], 
    "location": [0,0] 
} 

ответ

0

Потому что, когда он находит /garages/a/brand , он рассматривает его как /garages/a/ с маркой параметра, но /garages/a/ не принимает никаких параметров.

+0

Нет, это не так, если только не используется переменная URI, которой нет здесь. – chrylis

1

Проблема заключается в синтаксисе @RequestMapping. Удалить пробелы в разделе заголовков:

@RequestMapping(value = "/garages/a", method = RequestMethod.POST, headers = "Content-Type=application/json", produces = "application/json") 

@RequestMapping(value = "/garages/a/brand", method = RequestMethod.POST, headers = "Content-Type=application/json", produces = "application/json") 

еще лучше, вместо того чтобы использовать заголовки для фильтрации Content-Type, использование потребляет который является специфическим для этой цели:

@RequestMapping(value = "/garages/a", method = RequestMethod.POST, consumes= "application/json", produces = "application/json") 

@RequestMapping(value = "/garages/a/brand", method = RequestMethod.POST, consumes = "application/json", produces = "application/json") 

 Смежные вопросы

  • Нет связанных вопросов^_^