2017-07-10 2 views
0
春マップ列挙

は私のコントローラでは、私は、ステータスの変更を可能にするエンドポイントを作りましたDeviceStatusと入力してステータスを変更する方法:@RequestBody

public void updateStatus(final List<Integer> ids, final String status) { 
     getByIds(ids).forEach(device -> { 
      device.setStatus(status); 
      update(device); 
     }); 
    } 

しかし、device.setStatus(status);に問題があります。私はparseWithValidationを使うことができますが、それは既に行われているので意味がありません。誰かが私に与える{"status":"INACTIVE"}この列挙をどのように解析すればよいですか?

+0

;) –

答えて

2

EDIT:更新されたコメントを参照してください


あなたリクエストボディはタイプDeviceStatusstatusという名前のフィールドを持つオブジェクトであるので、あなたはおそらく、だからあなたのDeviceクラス

を使用することができます。

class Device { 
    // will be validated in the controller 
    private String status; 
    // getter, setter, etc 
} 

// with: 

public enum DeviceStatus { 
    ACTIVE, INACTIVE, DELETED, ARCHIVED; 
} 

および@RequestBody Foo fooコントローラme THOD署名:私はあなたがEnum.valueOfのコードを読むべきだと思う

public ResponseEntity<Void> changeStatus(@PathVariable final List<Integer> ids, @NotNull @RequestBody final Device device) { 
    try { 
     deviceService.updateStatus(ids, DeviceStatus.valueOf(device.getStatus())); 
    } catch(IllegalArgumentException ex) { 
     // throw some custom exception. device.getStatus() was invalid 
    } catch(NullPointerException ex) { 
     // throw some custom exception. device.getStatus() was null 
    } 
    // ... 
+0

はとても 'parseWithValidation'と' JsonCreate' @は不要ですか!誰かがenumに存在しないステータスを置くとどうなりますか? – user3529850

+0

[Enum#valueOf](https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html#valueOf-java.lang.Class-java.lang.String-)( => 'IllegalArgumentException') –

+0

私自身の例外を使用することはできますか? – user3529850

関連する問題