2013-08-31 2 views
8

Привет Я начинаю с веб-сервисов весной, поэтому я пытаюсь разработать небольшое приложение в Spring + JSON + Hibernate. У меня есть некоторые проблемы с HTTP-POST. Я создал метод:JSON post to Spring Controller

@RequestMapping(value="/workers/addNewWorker", method = RequestMethod.POST, produces = "application/json", consumes = "application/json") 
@ResponseBody 
public String addNewWorker(@RequestBody Test test) throws Exception { 
    String name = test.name; 
    return name; 
} 

И моя модель Тест выглядит следующим образом:

public class Test implements Serializable { 

private static final long serialVersionUID = -1764970284520387975L; 
public String name; 

public Test() { 
} 
} 

По POSTMAN Я представляемого просто JSON { «имя»: «АСМАП»}, и я всегда получаю ошибку;

The server refused this request because the request entity is in a format not supported by the requested resource for the requested method. 

Я импортировал библиотеку Джексона. Мои методы GET работают нормально. Я не знаю, что я делаю неправильно. Я благодарен за любые предложения.

+1

Когда вы отправили запрос с помощью POSTMAN, укажите заголовок «Тип контента: приложение/json»? –

+0

Хорошо, теперь работаем. Моя проблема была Content-type.И мой второй вопрос. Как работать с сущностными отношениями в JSON Spring? У меня есть юридические работники (когда у меня есть ссылка на адрес класса) И JSON: { "адрес": {"street": "asdas", "homeNo": "123", "flatNo": "123", " почтовый индекс ":" 123 "," город ":" asdas "}," name ":" asd "," email ":" asd "," pesel ":" 123 "," phone ":" asd "," employmentType ":" asd "," position ":" asd "," desc ":" asd " } И когда я пытаюсь выполнить POST в объект Workers, я получаю предыдущую ошибку. Что я делаю неправильно. Спасибо за последние ответы. – user2239655

+0

Вы указали «Принять: приложение/json» в заголовке? –

ответ

20

Преобразование объекта JSON в JSON строку с помощью

JSON.stringify ({ "имя": "АСМАП"})

или вручную. @RequestBody ожидает строку json вместо объекта json.

Примечание: stringify функция, имеющая проблемы с некоторыми версиями IE, Firefox будет работать

проверить синтаксис вашего запроса AJAX для запроса POST. ProcessData: ложное свойство требуется в запросе Ajax

$.ajax({ 
    url:urlName, 
    type:"POST", 
    contentType: "application/json; charset=utf-8", 
    data: jsonString, //Stringified Json Object 
    async: false, //Cross-domain requests and dataType: "jsonp" requests do not support synchronous operation 
    cache: false, //This will force requested pages not to be cached by the browser 
    processData:false, //To avoid making query String instead of JSON 
    success: function(resposeJsonObject){ 
     // Success Action 
    } 
}); 

Контроллер

@RequestMapping(value = urlPattern , method = RequestMethod.POST) 

public @ResponseBody Test addNewWorker(@RequestBody Test jsonString) { 

    //do business logic 
    return test; 
} 

@RequestBody -Covert Json объект Java

@ResponseBody - преобразовать объект Java в формате JSON

+0

Как скрывать объекты JSON Array ('[{a: 1}, {a: 2}]') в java? –

+0

@RequestBody не принимает List/Array напрямую для создания класса оболочки и установки его списка. –

+0

Структура вашего объекта похожа на этот класс Test { \t Integer id; Список personList; // getter and setters } JSON: {id: 1, personList: [{a: 1}, {a: 2}]} –

0

Попробуйте использовать приложение/* вместо этого. И используйте JSON.maybeJson(), чтобы проверить структуру данных в контроллере.

0

Не забудьте добавить ge teters и seters к вашему классу модели (в примере Test class).

0

Выполните следующие действия, если хотите использовать json как http-запрос и ответ. Таким образом, мы должны внести изменения в [контексте] .xml

<!-- Configure to plugin JSON as request and response in method handler --> 
<beans:bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"> 
    <beans:property name="messageConverters"> 
     <beans:list> 
      <beans:ref bean="jsonMessageConverter"/> 
     </beans:list> 
    </beans:property> 
</beans:bean> 
<!-- Configure bean to convert JSON to POJO and vice versa --> 
<beans:bean id="jsonMessageConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"> 
</beans:bean> 

MappingJackson2HttpMessageConverter к RequestMappingHandlerAdapter messageConverters так, что Джексон API пинки в и преобразует JSON в Java Beans, и наоборот. Имея эту конфигурацию, мы будем использовать JSON в теле запроса, и мы получим данные JSON в ответе.

Я также предоставляет небольшой фрагмент кода для контроллера части:

@RequestMapping(value = EmpRestURIConstants.DUMMY_EMP, method = RequestMethod.GET) 

    public @ResponseBody Employee getDummyEmployee() { 
    logger.info("Start getDummyEmployee"); 
    Employee emp = new Employee(); 
    emp.setId(9999); 
    emp.setName("Dummy"); 
    emp.setCreatedDate(new Date()); 
    empData.put(9999, emp); 
    return emp; 
} 

Так выше код объекта EMP будет непосредственно конвертировать в формат JSON в качестве ответа. то же самое произойдет и для почты.

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