Spring服务和RestTemplate客户端总是来自服务器的意外文件结尾

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() {

我的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() {
        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);