Spring服务和RestTemplate客户端总是来自服务器的意外文件结尾
我的POJO:Spring服务和RestTemplate客户端总是来自服务器的意外文件结尾,spring,rest,Spring,Rest,我的POJO: public class Product { String name; int price; public Product(){ } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getPrice() {
public class Product {
String name;
int price;
public Product(){
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
}
我的控制器:
@RestController
@RequestMapping("/rest")
public class RstController {
@RequestMapping(value = "/getProductPost2", method=RequestMethod.POST, produces = {"application/json"})
public Product getProductPost2(@RequestBody Product p){
System.out.println(p.getName());
return p;
}
我的客户机,使用JUnit(我已经尝试了所有注释行,每次都是相同的错误):
公共类RestTemplatePostTest{
@试验
公开无效测试对象(){
字符串url=”http://localhost:8443/ShoppingCartSpringMVCSpringDataHibernate/rest/getProductPost2";
产品p=新产品();
p、 setName(“produs”);
p、 设定价格(22);
字符串json=“{\'name\':\'pen\',\'price\':10}”;
HttpEntity请求=新的HttpEntity(p);
RestTemplate rt=新的RestTemplate();
rt.postForObject(url、json、String.class);
//rt.postForObject(url、p、String.class);
//rt.exchange(url、HttpMethod.POST、请求、Product.class);
//rt.exchange(url,HttpMethod.POST,request,String.class);
//assertEquals(“produs”,p2.getName());
}
}
当我使用邮递员时,它是有效的。
我还没有在互联网上找到任何其他选择,我已经两天没有尝试这么做了。任何意见或指导都是非常受欢迎的
Edit1:同样,简单的GET也不起作用,但它可以在浏览器或邮递员中使用
@RequestMapping(value = "/getProductGet", method=RequestMethod.GET)
public String getProductGet{
return "hello World!!";
}
@Test
public void testGet(){
String url = "http://localhost:8443/ShoppingCartSpringMVCSpringDataHibernate/rest/getProductGet";
RestTemplate rt = new RestTemplate();
ResponseEntity<String> response= rt.getForEntity(url, String.class);
}
@RequestMapping(value=“/getProductGet”,method=RequestMethod.GET)
公共字符串getProductGet{
返回“你好,世界!!”;
}
@试验
公共void testGet(){
字符串url=”http://localhost:8443/ShoppingCartSpringMVCSpringDataHibernate/rest/getProductGet";
RestTemplate rt=新的RestTemplate();
ResponseEntity response=rt.getForEntity(url,String.class);
}
在调试模式下,当浏览器或邮递员调用它时,它会在我的断点处停止,但在使用rest模板时它不会到达断点。
可能与我使用的是Spring security有关吧?我认为问题在于您的请求的数据类型错误,服务器无法解析,因此无法回复 由于您发送的是JSON内容类型的POST请求,因此您的
产品
必须是JSON编码的
为此,您需要添加一个json转换器,以便将代码修改为以下内容:
RestTemplate rt= new RestTemplate();
rt.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
Product recievedProduct = rt.postForObject(url, p, Product.class);
别忘了添加jackson依赖项
RestTemplate rt= new RestTemplate();
rt.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
Product recievedProduct = rt.postForObject(url, p, Product.class);