【问题标题】:post for rest service using restTemplate with object使用带有对象的 restTemplate 发布休息服务
【发布时间】:2014-05-29 11:06:41
【问题描述】:

假设我有这样的模型:
public class Foo { private String name; @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss") private Date date; } 控制器是这样的:
@RequestMapping("/getFoo") public @ResponseBoddy Foo getFoo(Foo ff) { return new ff(); }

在客户端我做了这样的事情:
Foo request = new Foo(); RestTeplate rest = new RestTemplate(); rest.postForObject("http://hostAddress:8080/Fooo/getFoo", request, String.class); 我的客户 Foo 与服务 Foo 相同
但是出了点问题,内容类型无效..
我的问题是:是否可以使用 java bean 发布对象?以及如何做,如果有指南从哪里开始构建和使用 Web 服务,我将不胜感激

【问题讨论】:

    标签: json spring date jackson resttemplate


    【解决方案1】:

    由于您在控制器中返回 Foo 对象,因此您应该以这种方式编写 RestTemplate:

    RestTeplate rest = new RestTemplate();
    rest.postForObject("http://hostAddress:8080/Fooo/getFoo", request, Foo.class);
    

    否则你可以写:

    @RequestMapping("/getFoo")
    public @ResponseBoddy Foo getFoo(Foo ff) {
    Foo ff = new Foo();
    String result = null;
    //Convert ff in String and valorize result
    return result;
    }
    

    希望对你有帮助

    安杰洛

    【讨论】:

    • 我认为你总是可以返回一个字符串,即使返回类型不是字符串,但是当返回一个对象时我得到它为空;
    • 还将@RequestBody 添加到您的控制器,所以getFoo(@RequestBody Foo ff)。这是有关该错误的更多上下文。您正在发布一个String,它使用StringHttpMessageConverter,导致内容类型为text/plain。按照 Angelo 的建议,将对象发布为 Foo.class 将导致 Jackson2HttpMessageConverter 用于转换为 JSON,后者将使用 application/json 发布。希望对您有所帮助。
    猜你喜欢
    • 1970-01-01
    • 2014-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-25
    相关资源
    最近更新 更多