簡體   English   中英

如何使用Spring和Hibernate生成消耗JSON對象的JSON響應

[英]How to produce json response that consumes json object using spring and Hibernate

我收到415錯誤。 這是我用於獲取json響應的映射

@RequestMapping(value="/details", method= RequestMethod.POST ,
        consumes= MediaType.APPLICATION_JSON_VALUE ,
        produces= MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<UserDetails> addUserDetails(@RequestBody 
                RegisterInput registerInput)throws ValidationException{

    if(registerInput==null || registerInput.getUserName()==null){
                throw new ValidationException("Input is not valid");
    }
    UserDetails userDetails=new UserDetails(registerInput.getUserName(),
                    registerInput.getFirstName(), registerInput.getLastName(), registerInput.getPassword());
    userDetailsService.addUserDetails(userDetails);
    return new ResponseEntity<UserDetails>(userDetails, HttpStatus.OK);
}

的pom.xml

<dependency>
    <groupId>org.codehaus.jackson</groupId>
    <artifactId>jackson-mapper-asl</artifactId>
    <version>1.9.13</version>
</dependency>
<dependency>
    <groupId>org.codehaus.jackson</groupId>
    <artifactId>jackson-core-asl</artifactId>
    <version>1.9.13</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-annotations</artifactId>
    <version>2.4.4</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-core</artifactId>
    <version>2.4.4</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.4.4</version>
</dependency>

幫助我如何獲取json響應,因為在我的情況下顯示錯誤415。 提前致謝

其中UserDetails是POJO類,而RegisterInput是存儲輸入並返回json對象。 以下是我的pom。

您可以重構您的方法,以通過@ResponseBody將響應直接返回到響應主體

   @RequestMapping(value="/details", method= RequestMethod.POST ,
            consumes= MediaType.APPLICATION_JSON_VALUE ,
            produces= MediaType.APPLICATION_JSON_VALUE)
   @ResponseBody public UserDetails addUserDetails(@RequestBody 
                                        RegisterInput registerInput)throws ValidationException{

        if(registerInput==null || registerInput.getUserName()==null){
           throw new ValidationException("Input is not valid");
         }
         UserDetails userDetails=new userDetails(registerInput.getUserName(),
                        registerInput.getFirstName(), registerInput.getLastName(), registerInput.getPassword());
          userDetailsService.addUserDetails(userDetails);
          return userDetails;
   }

還要注意,僅當您使用spring 4時,才需要jackson 2.x依賴項

要么

僅當您使用Spring 3.xx時才可使用jackson 1.9.x

您可以使用@RestController注釋控制器(而不是經典的@Controller )。

這樣,您就告訴Spring將要返回的對象用作響應的主體。

確保同時發送帶有application/json AcceptContent-Type標頭,並且要發送的Json格式正確。

您需要將發布的數據設為json。 我懷疑您發布數據是錯誤的。 這篇文章也是使用@Controller和@ResponseBody的Spring rest的好例子

您可以通過設置將JSON作為響應返回

ResponseEntity

作為控制器類中方法的返回類型。 您還可以通過創建Map來添加其他json鍵值對,請參見以下示例;

@DeleteMapping("/delete/{id}")
public ResponseEntity<Object> deleteDepartment(@PathVariable Long id) throws NotFoundException {


    Optional<Department> department = this.departmentService.findADepartment(id);
    if (department == null)
        return ResponseEntity.status(HttpStatus.NOT_FOUND).build();

    Map<String, String> stringStringMap = new HashMap<>();
    if (departmentService.deleteADepartment(id)) {
        stringStringMap.put("status", "success");
        stringStringMap.put("message", "successfully deleted");
        stringStringMap.put("code", "200");
        return ResponseEntity.status(HttpStatus.OK).
                body(stringStringMap);

    } else {
        stringStringMap.put("status", "failed");
        stringStringMap.put("message", "not  deleted");
        stringStringMap.put("code", "404");
        return ResponseEntity.status(HttpStatus.NOT_FOUND).
                body(stringStringMap);

    }

}

這里的輸入URL是

http://localhost:8080/department/delete/7

輸出響應是

{
"code": "200",
"message": "successfully deleted",
"status": "success"
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM