使用jsonobject无法正常工作的restcontroller弹簧启动

时间:2017-11-28 18:31:00

标签: spring-boot

我正在使用spring boot,如果我使用jsonobject类型请求制作restcontroller或控制器,那么它不起作用,而当我将type更改为string时也一样。

@Controller
@RequestMapping("rest/dummy")

public class CustomerController {

    @GetMapping("test")
    public ResponseEntity test(@RequestParam("req") JSONObject inputData) {
        org.json.JSONObject response = new org.json.JSONObject();
        response.put("abc", "123");
        return new ResponseEntity(inputData.toString(), HttpStatus.OK);
    }

的pom.xml:

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>1.5.8.RELEASE</version>
</dependency>
<dependency>
            <groupId>org.json</groupId>
            <artifactId>json</artifactId>
            <version>20171018</version>
        </dependency>
        <dependency>
            <groupId>javax.persistence</groupId>
            <artifactId>persistence-api</artifactId>
            <version>1.0.2</version>
        </dependency>

我确实想要将它与GET和POST类型一起使用,并且我也希望将jsonobject用于请求和响应,因为数据可以随时更改及其类型。

3 个答案:

答案 0 :(得分:2)

在RequestParam中,我们发送在URL中添加的键值, 要发送Json对象,请在RequestBody中发送它。

使用@RequestBody并在您的请求的正文部分发送您的Json。

答案 1 :(得分:0)

使用真正的POJO作为参数和返回值是更好的方法imo。使用Jackson注释配置这些POJO。

反正。这应该有效:

@GetMapping("test")
public ResponseEntity<String> test(@RequestParam("req") JSONObject inputData) {
    org.json.JSONObject response = new org.json.JSONObject();
    response.put("abc", "123");
    return ResponseEntity.ok(inputData.toString());
}

替代地

@GetMapping("test")
public ResponseEntity<SomeOutputDto> test(@RequestParam("req") String inputData) {

    SomeOutputDto out = new SomeOutputDto();
    out.setAbc(123);
    return ResponseEntity.ok(dto);
}

这需要一个额外的类:SomeOutputDto,但另一方面,您可以更好地控制代码。

public class SomeOutputDto {
   private int abc = 0;

  public void setAbc(int v) {
    this.abc = v;
  }
  public int getAbc() { return this.abc; }
}

答案 2 :(得分:0)

使用apache-tomcat 8.0.15工作,同样不能用于apache-tomcat 8.0.49