SpringMVC restful 异常Could not write request: no suitable HttpMessageConverter found for request type

来源:互联网 发布:软件测试总结 编辑:程序博客网 时间:2024/06/03 17:32
Exception in thread "main" org.springframework.web.client.RestClientException: Could not write request: no suitable HttpMessageConverter found for request type [com.jersey.test.entity.Student]
at org.springframework.web.client.RestTemplate$HttpEntityRequestCallback.doWithRequest(RestTemplate.java:597)
at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:436)
at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:401)
at org.springframework.web.client.RestTemplate.postForObject(RestTemplate.java:279)
at com.jersey.test.RestClient.addStudent(RestClient.java:47)

at com.jersey.test.RestClient.main(RestClient.java:75)

springMVC controller 如下:

@RequestMapping(value="/static/restful")
@Controller
public class StudentRestfulController {


private IBaseService<Student> studentService;

@RequestMapping(value="/addStudent",method=RequestMethod.POST)
public void addStudent(@RequestBody Student entity){
//this.studentService.save(entity);

System.out.println("firstname :"+entity.getFirstname()+" lastname "+entity.getLastname());
}

@RequestMapping(value="/batchAddStudent",method=RequestMethod.POST)
public void batchAddStudent(@RequestBody List<Student> students){
if(students!=null&&students.size()>0){
for(Student student:students){
this.studentService.save(student);
}
}
}
}

实体:

public class Student {


private String workUnit = null;
 private String id = null;
 private String loginname = null;
 private String password = null;
 private String lastname = null;

}

客户端调用代码:

public class RestClient {

private RestTemplate template;

private final static String url = "http://localhost:8080/rdb/static/restful/";

         public void addStudent(Student stu){
  template=new RestTemplate();
  template.postForObject(url+"addStudent.do", stu, String.class);
        }

}

解决方法:

一、在实体类中加上@XmlRootElement注解,SpringMVC就可以解析出来了

二、修改客户端中调用的代码

在RestTemplate模板中添加消息转换器,有两种方法

1.直接在代码中添加

  public void addStudent(Student stu){
  template=new RestTemplate();
  List messageConverters=new ArrayList();
  messageConverters.add(new SourceHttpMessageConverter());
  messageConverters.add(new FormHttpMessageConverter());
  messageConverters.add(new MappingJacksonHttpMessageConverter());
  template.setMessageConverters(messageConverters);
  template.postForObject(url+"addStudent.do", stu, String.class);
   }

2.在客户端XML配置文件中添加转换器

<bean id="restTemplate" class="org.springframework.web.client.RestTemplate"><span style="white-space:pre"></span>    <property name="messageConverters"><span style="white-space:pre"></span>        <list><span style="white-space:pre"></span>            <bean class="org.springframework.http.converter.xml.SourceHttpMessageConverter"/><span style="white-space:pre"></span>            <bean class="org.springframework.http.converter.FormHttpMessageConverter"/><span style="white-space:pre"></span>            <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"/><span style="white-space:pre"></span>        </list><span style="white-space:pre"></span>    </property><span style="white-space:pre"></span></bean>
测试
   public void testRest(Student stu){<span style="white-space:pre"></span>   BeanFactory bean=new ClassPathXmlApplicationContext("applicationContext.xml");<span style="white-space:pre"></span>   template=(RestTemplate)bean.getBean("restTemplate");<span style="white-space:pre"></span>   template.postForObject(url+"addStudent.do", stu, String.class);   }
0 0
原创粉丝点击