2015-10-17 18 views
8

Tôi có một phương pháp đơn giản trong điều khiểnCó thể trong Spring MVC 4 trả về Boolean dưới dạng JSON không?

@RequestMapping("admin") 
public @ResponseBody 
Boolean admin() { 
    Boolean success = true; 
    return success; 
} 

và đáp lại tôi muốn trở { "success": true }

Annontation @ResponseBody nói rằng phản ứng sẽ là JSON. Nhưng bây giờ trong repsonse tôi nhận được chỉ là sự thật.

Có cách nào khác để giải quyết nó không?

Hoặc tôi nên làm điều gì đó như

@RequestMapping("admin") 
public @ResponseBody 
Map<String, Boolean> admin() { 
    Map<String, Boolean> success = new TreeMap<String, Boolean>(); 
    success.put("success", true); 
    return success; 
} 

Tôi muốn biết thực hành tốt nhất cho việc này.

Trả lời

16

Bạn không thể trả lại kiểu nguyên thủy (hoặc loại trình bao bọc nguyên thủy) và nhận đối tượng JSON làm phản hồi. Bạn phải trả lại một số đối tượng, ví dụ: Map hoặc đối tượng miền tùy chỉnh.

Cách tiếp cận Bản đồ được hiển thị trong câu hỏi của bạn là hoàn toàn hợp lệ. Nếu bạn muốn, bạn có thể nén gọn nó thành một lớp lót đẹp bằng cách sử dụng Collections.singletonMap().

@RequestMapping 
@ResponseBody 
public Map<String, Boolean> admin() { 
    return Collections.singletonMap("success", true); 
} 
1

Không thể. Tên biến 'thành công' bị mất. Sử dụng bản đồ hoặc tạo một lớp trình bao bọc nhỏ.

public class BooleanResult { 
    public boolean success; 
} 
2

Bạn không thể trả về giá trị boolean, tuy nhiên, hãy cân nhắc sử dụng ResponseEntities và sử dụng mã trạng thái HTTP để giao tiếp thành công.

public ResponseEntity<String> admin() { 
    if (isAdmin()) { 
     return new ResponseEntity<String>(HttpStatus.OK); 
    } else { 
     return new ResponseEntity<String>(HttpStatus.FORBIDDEN);    
    } 
} 

Phương pháp này sẽ trả về một tài liệu trống rỗng, nhưng bạn có thể kiểm soát các mã trạng thái (FORBIDDEN chỉ là ví dụ, bạn có thể chọn các mã trạng thái đó là thích hợp hơn, ví dụ như không tìm thấy?)

0

Tôi đang sử dụng jsonobject để làm điều này.

trả về JSONObject mới() .đặt ("kết quả", đúng) .toString().

Các vấn đề liên quan