通过REST传输对象

时间:2017-07-08 17:23:09

标签: java rest spring-mvc

我一直试图通过休息将一个对象从一个应用程序发送到另一个应用程序。

发信人:

@Controller
public class Sender {
    @RequestMapping(value = "/comMessageApp-api/getMessages")
    public String restGetMessages() {
        String url = "http://localhost:8079/comMessageApp-api/responseMessages";
        HttpEntity<Dto2> entity = new HttpEntity<>(new Dto2());
        ResponseEntity<Dto2> response = restTemplate.exchange(url, HttpMethod.POST, entity, Dto2.class);
    }
}

接收器:

@RestController
public class Receiver {
    @RequestMapping(value = "/comMessageApp-api/responseMessages")
    public void restResponseMessages(HttpEntity<Dto2> request) {
        System.out.println(request.getBody());       
    }
}

DTO:

public class Dto2 {
    private String string = "Test string";

    public Dto2() {
    }

    public String getString() {
        return string;
    }

    public void setString(String string) {
        this.string = string;
    }
}
杰克逊用于序列化/反序列化。

任何想法,为什么request.getBody()打印在Receiver中为null ??? 我试图在HttpEntity和RequestEntity内发送对象。两种情况都没有成功。在接收方,我总是得到空。

2 个答案:

答案 0 :(得分:0)

您的发件人(客户)方面非常接近,但您的服务器端没有返回值,因此将类型更改为Void:

ResponseEntity<Void> response = restOps.exchange(url, HttpMethod.POST, entity, Void.class);

你的接收器(服务器)端也没有完全正确设置,你需要将HTTP方法设置为[编辑] POST。您还需要告诉Spring将请求的主体(您的其余有效负载)映射到参数上;

@RequestMapping(value = "/comMessageApp-api/responseMessages", method=RequestMethod.POST)
public void recieveDto (@RequestBody final Dto dto) {
    System.out.println(dto.toString());
}

[编辑] Brainfart,http方法应该在接收注释时设置为POST。

[进一步的建议] 403错误可能是由Spring Security引起的,如果你打开它(如果你不确定的话请查看你的POM)试试这个;

@Configuration
@EnableWebSecurity
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .csrf()
                .disable()
        .authorizeRequests().
            antMatchers("/**").permitAll();
    }
}

一旦你知道它有效,你就会想要加强安全性。

答案 1 :(得分:-1)

尝试使用@RequestMapping(method = RequestMethod.POST, produces = "application/json", consumes = "application/json")